Se qualcuno ha tribolato con i numeri in Oracle allora si ritroverà in questa esperienza.
Cosa fare se dobbiamo cambiare la precisione di un numero e la tabella ha valori?
Chi ha provato con una alter table ha spesso trovato ostacoli da parte di Oracle.
Facciamo un esperimento vediamo come agire.
Prima una tabella sperimentale :
SQL> create table numeri ( numero number(10,8)); SQL> insert into numeri values (9.24); SQL> insert into numeri values (9.338837223);
Verifichiamo:
SQL> select * from numeri; NUMERO ---------- 9.24 9.33883722
Proviamo a modificare:
SQL> alter table numeri modify ( numero number(10,10)); alter table numeri modify ( numero number(10,10)) * ERROR at line 1: ORA-01440: column to be modified must be empty to decrease precision or scale
Ma ecco il trucco: aumentando proporzionalmente (in questo caso di 2) precisione e scala (ossia 10+2,8+2), otteniamo:
SQL> alter table numeri modify ( numero number(12,10)); Table altered.
Ed è tutto qui.
Il motivo è semplice: alterando solo scala o precisione.si rischia di avere perdita di informazione, pertanto il motore ce lo vieta. Ma innalzando entrambi si risolve il problema.
Alla prossima esperienza.