sql >> Base de Datos >  >> RDS >> Oracle

ORA-01401:valor insertado demasiado grande para la columna CHAR

Su archivo de datos tiene caracteres adicionales e invisibles. No podemos ver el original, pero presumiblemente se creó en Windows y tiene CRLF separadores de nueva línea; y está ejecutando SQL*Loader en un entorno UNIX/Linux que solo espera salto de línea (LF). Los caracteres de retorno de carro (CR) todavía están en el archivo y Oracle los ve como parte del campo ZIP en el archivo.

La última línea no tiene un CRLF (ni ningún marcador de nueva línea), por lo que en esa línea, y solo esa línea:el campo ZIP se ve como 5 caracteres, para todos los demás se ve como seis, p. 98001^M .

Puede leer más sobre el comportamiento predeterminado en la documentación :

Si abre el archivo de datos en una edición como vi o vim, verá esos ^M adicionales personajes de control.

Hay varias formas de arreglar esto. Puede modificar el archivo; lo más sencillo es copiar y pegar los datos en un nuevo archivo creado en el entorno en el que ejecutará SQL*Loader. Hay utilidades para convertir finales de línea si lo prefiere, p. dos2unix . O su editor de Windows puede guardar el archivo sin los CR. También podría agregar un delimitador de campo adicional al archivo de datos, como sugirió Ditto.

O podría decirle a SQL*Loader que espere CRLF cambiando el INFILE línea:

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

... aunque eso causará problemas si proporciona un archivo creado en Linux, sin los caracteres CR.