È lo stesso per definire un tipo di varchar2 (10) o varchar2 (1000).
No, non è la stessa cosa.
- La lunghezza della colonna è metadati utili per gli sviluppatori che creano schermate.
- Analogamente strumenti di query automatici come TOAD e SQL Developer utilizzano la lunghezza della colonna quando restituiscono risultati.
- Il database utilizza la lunghezza di una variabile durante l'allocazione della memoria per le raccolte PL/SQL. Poiché la memoria esce dal PGA, la sostituzione della dichiarazione delle variabili può portare al 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 supersized creano problemi per gli indici composti. Il seguente è 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 sopra ogni altra cosa, colonne dimensioni sono una forma di controllo degli errori. Se la colonna deve avere una lunghezza di dieci caratteri e un processo autonomo tenta di caricare un migliaio di caratteri, allora qualcosa non va. Il processo dovrebbe fallire, così possiamo indagare sul motivo per cui stiamo caricando i dati di Duff. L'alternativa è un database pieno di spazzatura e, se questo è ciò che si voleva, dovremmo aver dato a tutti Excel e averlo fatto.
È vero che cambiare la dimensione della colonna quando si scopre che abbiamo sottovalutato può essere noioso. Ma non succede molto spesso e possiamo mitigare un sacco di dolore usando le dichiarazioni di% TYPE e SUBTYPE nel nostro PL/SQL invece delle lunghezze variabili hard-coding.
"il motivo per cui tale dichiarazione tipo di numero"
numeri sono diversi. Per cominciare, la dimensione massima di un numero è molto più piccola dell'equivalente del testo (38 cifre di precisione garantita).
Ma la differenza chiave è che Oracle memorizza i valori numerici in scientific notation quindi non esiste una relazione diretta tra la dimensione aritmetica del numero e lo spazio di archiviazione che consuma.
SQL> select vsize(123456789) 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, rimane buona pratica per specificare scala e la precisione nella misura del possibile, soprattutto quando si tratta di numeri interi, per esempio, o il denaro.
Non sono contento del modo in cui si forma la domanda. In ultima analisi, Oracle 9 o gli standard SQL board) decidono come funzionano queste cose e come sviluppatori lavoriamo al loro interno. Discutere perché è un po 'fuori tema. Detto questo, se la domanda fosse "Perché non dovrei fare tutti i miei 4000 byte VARCHAR2 per evitare che i problemi derivanti dalla colonna siano troppo piccoli, sarebbe una domanda più pratica e le risposte sarebbero simili –
@damian, quali problemi sono hai ridimensionato a dimensioni maggiori? –
@Gary Hai ragione ma perché non criticare anche Oracle Standar? Sono a conoscenza del tipo di movimento nosql della domanda @Jeffrey, no, ma è una soluzione prevedibile e fastidiosa quando l'app client ha bisogno di ridimensionare – user2427