SQL*Loader

Tengo un archivo .CSV lo deseo subir a una BD Oracle, pero los datos que se encuentran en ese archivo NO todos corresponden a una misma tabla, esto es el archivo contiene datos que tienen como destino 2 tablas diferentes de mi BD de Oracle. Quiero saber si con el SQL*Loader del Oracle puedo hacer que me suba la información al mismo tiempo a cada una de las tablas, no tengo ni idea como indicar en el .CTL que ciertos datos van a una tabla y que otros van a otra, hasta ahora solo he visto ejemplos en donde se especifica en el into table una sola tabla.
Respuesta
1
Lo siento pero hasta ahí no llego. Puedes probar a crear dos CTL y hacer dos cargas.
Lo siento.

1 respuesta más de otro experto

Respuesta
1
La operación más fiable que puedes llevar a cabo es insertar los datos en una tabla auxiliar y seguidamente hacer una selección de ellos y una proyección hacia cada una de las tablas. Creo que esta va a ser la operación más fiable, ya que Sql-Loader, aunque es una herramienta fiable, es una herramienta de carga masiva y será más fiable si nosotros hacemos un programa con PL/Sql o con SQL.
En este caso deberás saber de antemano qué datos van para una tabla y que datos van para otra, y en cuestión de 5min. Tendrás los datos exactamente donde quieres.
Ej: Has metido los datos en una tabla que se llama: AUX_TRANS. Las otras tablas de llamarás A y B.
Insertaremos los datos así.
Ej:
Hacemos el proceso loader hacia AUX_TRANS.
Comprobamos con un Select (count)... que tenemos los registros requeridos.
Insert into A
Select ename, sal, comm from AUX_TRANS where sal > 1000 and comm is not null;
Commit;
Creo que este es el modo más rapido y fiable para mover estos datos.
Se me olvidada comentarte que claro que se puede insertar en varias tablas a la vez desde un loader, solo que tendrás que tener claro lo que quieres hacer y de que modo lo vas ha hacer. Si quisiésemos insertar en la tabla emp y en la tabla dept a la vez datos de un mismo fichero .dat lo haríamos de la siguiente manera:
INTO TABLE dept
WHEN RECID = 3
(RECID POSITION(1:1) INTEGER,
DEPTNO POSITION(19:24) INTEGER)
INTO TABLE emp
WHEN RECID <> 3
(Recid position(1:1) integer,
empno position (12:15) integer)
Fíjate que se le puede controlar el flujo de los datos mediante la clausula WHEN. Actúa como si fuese una sentencia de control.
Muy útil para cuando hayamos hecho algunas pruebas en tablas auxiliares.
Pruébalo antes y si compruebas que funciona bien, documéntatelo y úsalo porque es una herramienta muy potente.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas