Oracle
 sql >> Base de données >  >> RDS >> Oracle

ORA-01401 :valeur insérée trop grande pour la colonne CHAR

Votre fichier de données contient des caractères supplémentaires invisibles. Nous ne pouvons pas voir l'original, mais il a probablement été créé sous Windows et comporte des séparateurs de nouvelle ligne; et vous exécutez SQL*Loader dans un environnement UNIX/Linux qui n'attend qu'un saut de ligne (LF). Les caractères de retour chariot (CR) sont toujours dans le fichier et Oracle les considère comme faisant partie du champ ZIP du fichier.

La dernière ligne n'a pas de CRLF (ou de marqueur de nouvelle ligne), donc sur cette ligne - et seulement cette ligne - le champ ZIP est vu comme 5 caractères, pour tous les autres, il est vu comme six, par ex. 98001^M .

Vous pouvez en savoir plus sur le comportement par défaut dans la documentation :

Si vous ouvrez le fichier de données dans une édition comme vi ou vim, vous verrez ces ^M supplémentaires caractères de contrôle.

Il existe plusieurs façons de résoudre ce problème. Vous pouvez modifier le fichier ; la chose la plus simple à faire est de copier et coller les données dans un nouveau fichier créé dans l'environnement dans lequel vous exécuterez SQL * Loader. Il existe des utilitaires pour convertir les fins de ligne si vous préférez, par ex. dos2unix . Ou votre éditeur Windows peut être en mesure d'enregistrer le fichier sans les CR. Vous pouvez également ajouter un délimiteur de champ supplémentaire au fichier de données, comme suggéré par Ditto.

Ou vous pouvez dire à SQL*Loader d'attendre CRLF en changeant le INFILE ligne :

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

... bien que cela causera des problèmes si vous fournissez un fichier créé sous Linux, sans les caractères CR.