Saltar al contenido

Se requiere Oracle sqlldr TRAILING NULLCOLS, pero ¿por qué?

Solución:

Ha definido 5 campos en su archivo de control. Sus campos terminan con una coma, por lo que necesita 5 comas en cada registro para los 5 campos a menos que se especifique TRAILING NULLCOLS, aunque esté cargando el campo ID con un valor de secuencia a través de la cadena SQL.

RE: Comentario de OP

Esa no es mi experiencia con una prueba breve. Con el siguiente archivo de control:

load data
infile *
into table T_new
fields terminated by "," optionally enclosed by '"'
( A,
  B,
  C,
  D,
  ID "ID_SEQ.NEXTVAL"
)
BEGINDATA
1,1,,,
2,2,2,,
3,3,3,3,
4,4,4,4,,
,,,,,

Produjo el siguiente resultado:

Table T_NEW, loaded from every logical record.
Insert option in effect for this table: INSERT

   Column Name                  Position   Len  Term Encl Datatype
------------------------------ ---------- ----- ---- ---- ---------------------
A                                   FIRST     *   ,  O(") CHARACTER            
B                                    NEXT     *   ,  O(") CHARACTER            
C                                    NEXT     *   ,  O(") CHARACTER            
D                                    NEXT     *   ,  O(") CHARACTER            
ID                                   NEXT     *   ,  O(") CHARACTER            
    SQL string for column : "ID_SEQ.NEXTVAL"

Record 1: Rejected - Error on table T_NEW, column ID.
Column not found before end of logical record (use TRAILING NULLCOLS)
Record 2: Rejected - Error on table T_NEW, column ID.
Column not found before end of logical record (use TRAILING NULLCOLS)
Record 3: Rejected - Error on table T_NEW, column ID.
Column not found before end of logical record (use TRAILING NULLCOLS)
Record 5: Discarded - all columns null.

Table T_NEW:
  1 Row successfully loaded.
  3 Rows not loaded due to data errors.
  0 Rows not loaded because all WHEN clauses were failed.
  1 Row not loaded because all fields were null.

Tenga en cuenta que la única fila que se cargó correctamente tenía 5 comas. Incluso la tercera fila, con todos los valores de datos presentes excepto ID, los datos no se cargan. A menos que me esté perdiendo algo …

Estoy usando 10gR2.

El problema aquí es que ha definido ID como un campo en su archivo de datos cuando lo que desea es usar una expresión sin ningún dato del archivo de datos. Puede solucionar este problema definiendo ID como una expresión (o una secuencia en este caso)

ID EXPRESSION "ID_SEQ.nextval"

o

ID SEQUENCE(count)

Consulte: http://docs.oracle.com/cd/B28359_01/server.111/b28319/ldr_field_list.htm#i1008234 para conocer todas las opciones

La última columna en su archivo de entrada debe tener algunos datos (ya sea espacio o carácter, pero no nulo). Supongo que el primer registro contiene un valor nulo después del último ‘,’ que sqlldr no reconocerá a menos que se le pida específicamente que reconozca los valores nulos mediante la opción TRAILING NULLCOLS. Alternativamente, si no desea utilizar TRAILING NULLCOLS, tendrá que ocuparse de esos NULL antes de pasar el archivo a sqlldr. Espero que esto ayude

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *