Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Oracle »

Importacion de datos Tabla externa o sql*loader

Estas en el tema de Importacion de datos Tabla externa o sql*loader en el foro de Oracle en Foros del Web. Hola, estoy necesitando incorporar datos desde un archivo plano (Version Oracle 10), delimitado con pipes. He utilizado tablas externas. El problema se me plantea porque ...
  #1 (permalink)  
Antiguo 11/08/2011, 11:13
 
Fecha de Ingreso: agosto-2011
Mensajes: 3
Antigüedad: 12 años, 8 meses
Puntos: 0
Pregunta Importacion de datos Tabla externa o sql*loader

Hola, estoy necesitando incorporar datos desde un archivo plano (Version Oracle 10), delimitado con pipes. He utilizado tablas externas. El problema se me plantea porque existen registros en el archivo plano que vienen "escapados " es decir el dato contiene un pipe, y entonces en el archivo ese campo me figura con un \|, y el loader no reconoce ese \como caracter de escape y toma el pipe como separador de campo, provocando que el registro no pueda incorporarse correctamente.
el error que me genera en es
KUP-04021: field formatting error for field FECHA
KUP-04026: field too long for datatype
KUP-04101: record 106811 rejected in file /u50/oradata/../archivoplano.txt

y es porque como un registro normal seria
1|2|3|ALGUN TEXTO AQUI|27/04/2006|
Y ESTE TIENE
1|2|3|TEXTO ESCAPADO\| QUE SIGUE AQUI|26/04/2006|


Existe alguna manera de poder lidiar con esto, fuera de cambiar el dato en el plano? Con sql*loader me pasará lo mismo?

Desde ya muchas gracias.
  #2 (permalink)  
Antiguo 15/08/2011, 14:51
Avatar de matanga  
Fecha de Ingreso: octubre-2007
Ubicación: España
Mensajes: 1.091
Antigüedad: 16 años, 5 meses
Puntos: 85
Respuesta: Importacion de datos Tabla externa o sql*loader

Para resover esto puedes determinar el contenido de los campos varchar entre comillas dobles en el fichero de datos y utilizar la sentencia optionally enclosed by '"' en el fichero de control o lo definición de la tabla, por ejemplo

Código:
C:\Temp>more data.txt
1|"texto"
2|"texto|texto"
Código:
C:\Temp>more control.txt
load data
into table t1
fields terminated by "|" optionally enclosed by '"'
(id,data)
Código:
C:\Temp>sqlldr user/pass@sid control=control.txt data=data.txt

SQL*Loader: Release 10.2.0.1.0 - Production on Mon Aug 15 22:30:12 2011

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

Commit point reached - logical record count 2
Código:
SQL> select * from t1;

        ID DATA
---------- ------------------------------
         1 texto
         2 texto|texto
1. Ten en mente que deberás quitar el caracter de escapeo "\", de lo contrario será insertado con el resto del registro.
2. Las tablas externas del tipo ORACLE_LOADER utilizan el SQL*Loader para la carga de datos, es por eso que el comportamiento es el mismo.

Saludos
  #3 (permalink)  
Antiguo 17/08/2011, 07:09
 
Fecha de Ingreso: agosto-2011
Mensajes: 3
Antigüedad: 12 años, 8 meses
Puntos: 0
Respuesta: Importacion de datos Tabla externa o sql*loader

Muchas gracias!!! El problema con esta solucion es que me obliga a generar todos los planos de vuelta agregando el encerrado del texto entre las dobles comillas y a generar un proceso para la detección -y eventual eliminacion del backslash- cuando exista como caracter de escape y no como "dato" real. Esperaba hallar la forma de setear el upload para que Oracle interprete el \ como caracter de escape y asi hacer transparente el proceso.
Igualmente, gracias por el dato.

Etiquetas: externa, importacion, sql, tabla
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 21:30.