2011-12-06 22 views
8

Ho un campo in una tabella che è varchar2, 4000 byte. Ci sono oltre 50000 righe. Non tutte le righe hanno dati in questo campo. Pochi campi di dati sono oltre 255 byte, ma alcuni sono 4000. Per posizionare la tabella in una nuova applicazione, ho bisogno di abbreviare il campo a 255 byte.Come rendere un campo varchar2 più corto in Oracle?

Esiste un'istruzione SQL che ridurrà la lunghezza a 255? Mi rendo conto che i dati andranno persi, e questo fa parte del costo della nuova applicazione. Il taglio dovrebbe essere arbitrario, basta interrompere i dati a 255 indipendentemente dalla circostanza.

+0

aggiornamento e substring – xQbert

risposta

28
update b set text2 = substr(text2,1,255); 

poi alter table per impostare la lunghezza della colonna per 255:

alter table b MODIFY "TEXT2" varchar2(255 byte); 
+0

La ringrazio molto! – user761758

+8

dato che ci sono solo poche righe, vorrei solo aggiornare i record che sono troppo grandi ... aggiungi 'WHERE LENGTH (text2)> 255' –

+1

DOMANDA TEORISTICA: Sono curioso di sapere come questo potrebbe aiutare. a prima vista sono d'accordo che dovrebbe. Ma quando ho iniziato a pensarci ho iniziato a chiedermi. con il dove, dovrebbe fare prima una lunghezza (hit della performance) su OGNI record perché dubito che ci sia un indice sulla lunghezza. poi ha la sottostringa. Quindi mi sembra che potrebbe effettivamente essere più lento. semplicemente usando lo str, fa il conteggio una volta per ogni record e si ferma a 255 o alla fine della stringa ogni volta. mentre con la lunghezza deve contare tutto. quindi fai la sottostringa. Solo spunti di riflessione. – xQbert

Problemi correlati