No, non è affatto la stessa cosa.
- La lunghezza della colonna è metadati utili per gli sviluppatori che creano schermate.
- Strumenti di query automatici simili come TOAD e SQL Developer utilizzano la lunghezza della colonna durante il rendering dei risultati.
- Il database utilizza la lunghezza di una variabile durante l'allocazione della memoria per le raccolte PL/SQL. Poiché quella memoria esce dal PGA, il sovradimensionamento della dichiarazione della variabile può causare il fallimento dei programmi perché il server ha esaurito la memoria.
- Ci sono problemi simili con la dichiarazione di singole variabili nei programmi PL/SQL, è solo che le raccolte tendono a moltiplicare il problema.
- Le colonne sovradimensionate creano problemi per gli indici composti. Quanto segue è su un database con 8K blocchi
....
SQL> create table t23 (col1 varchar2(4000), col2 varchar2(4000))
2 /
Table created.
SQL> create index t23_i on t23(col1,col2)
2 /
create index t23_i on t23(col1,col2)
*
ERROR at line 1:
ORA-01450: maximum key length (6398) exceeded
SQL>
Ma soprattutto, le dimensioni delle colonne sono una forma di controllo degli errori. Se la colonna dovrebbe essere lunga dieci caratteri e qualche processo autonomo sta tentando di caricare un migliaio di caratteri, allora qualcosa non va. Il processo dovrebbe fallire, quindi possiamo indagare sul motivo per cui stiamo caricando i dati Duff. L'alternativa è un database pieno di spazzatura e, se era quello che volevamo, avremmo dovuto semplicemente fornire a tutti Excel e farcela.
È vero che cambiare la dimensione della colonna quando risulta che abbiamo sottovalutato può essere noioso. Ma non succede molto spesso e possiamo mitigare un sacco di problemi usando le dichiarazioni %TYPE e SUBTYPE nel nostro PL/SQL invece di codificare le lunghezze variabili.
I numeri sono diversi. Per cominciare, la dimensione massima di un numero è molto più piccola dell'equivalente testuale (38 cifre di precisione garantita).
Ma la differenza fondamentale è che Oracle memorizza i valori numerici in notazione scientifica quindi non esiste una relazione diretta tra la dimensione aritmetica del numero e lo spazio di archiviazione che consuma.
SQL> select vsize(123456789012345678901) n1
2 , vsize(999999999999999999999999999999) n2
3 , vsize(0.000000000000000000001) n3
4 , vsize(1000000000000000000000000) n4
5 from dual
6 /
N1 N2 N3 N4
---------- ---------- ---------- ----------
12 16 2 2
SQL>
Tuttavia, è buona norma specificare la scala e la precisione ove possibile, specialmente quando si tratta di numeri interi, diciamo, o di denaro.