Oracle
 sql >> Database >  >> RDS >> Oracle

ORA-01401:valore inserito troppo grande per la colonna CHAR

Il tuo file di dati ha caratteri extra e invisibili. Non possiamo vedere l'originale ma presumibilmente è stato creato in Windows e ha CRLF nuovi separatori di riga; e stai eseguendo SQL*Loader in un ambiente UNIX/Linux che si aspetta solo line feed (LF). I caratteri di ritorno a capo (CR) sono ancora nel file e Oracle li vede come parte del campo ZIP nel file.

L'ultima riga non ha un CRLF (o qualsiasi indicatore di nuova riga), quindi su quella riga - e solo quella riga - il campo ZIP viene visto come 5 caratteri, Per tutti gli altri viene visto come sei, ad es. 98001^M .

Puoi leggere ulteriori informazioni sul comportamento predefinito nella documentazione :

Se apri il file di dati in una modifica come vi o vim, vedrai quei ^M extra caratteri di controllo.

Ci sono diversi modi per risolvere questo problema. Puoi modificare il file; la cosa più semplice da fare è copiare e incollare i dati in un nuovo file creato nell'ambiente in cui eseguirai SQL*Loader. Se preferisci, sono disponibili utilità per convertire le terminazioni di riga, ad es. dos2unix . Oppure il tuo editor di Windows potrebbe essere in grado di salvare il file senza i CR. Potresti anche aggiungere un delimitatore di campo aggiuntivo al file di dati, come suggerito da Ditto.

Oppure potresti dire a SQL*Loader di aspettarsi CRLF modificando INFILE riga:

LOAD DATA
INFILE Customer.dat "str '\r\n'"
INTO TABLE Customer
...

... anche se ciò causerà problemi se fornisci un file creato in Linux, senza i caratteri CR.