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

Nombre Fichero Al Ejecutar Un Loader

Estas en el tema de Nombre Fichero Al Ejecutar Un Loader en el foro de Oracle en Foros del Web. Buenas estoy cargando unas tablas en Oracle 9i a través de un loader y mediante un ctl en el que indico las columnas a cargar ...
  #1 (permalink)  
Antiguo 15/02/2008, 07:35
 
Fecha de Ingreso: febrero-2008
Mensajes: 10
Antigüedad: 16 años, 9 meses
Puntos: 0
Nombre Fichero Al Ejecutar Un Loader

Buenas estoy cargando unas tablas en Oracle 9i a través de un loader y mediante un ctl en el que indico las columnas a cargar en la tabla, y necesito recuperar el nombre del fichero que cargo para cuando falle saber a que fichero corresponde cada registro. ¿Alguien me puede ayudar? gracuas
  #2 (permalink)  
Antiguo 15/02/2008, 09:12
Avatar de matanga  
Fecha de Ingreso: octubre-2007
Ubicación: España
Mensajes: 1.091
Antigüedad: 17 años
Puntos: 85
Re: Nombre Fichero Al Ejecutar Un Loader

Hola,

No estoy seguro de entender el problema, ¿realizas varias cargas con diferentes ficheros de datos sobre la misma tabla?

Si este es el caso, puedes configurar el parametro bad=fichero.bad del SQL*Loader para que te guarde los registros rechazados, y que el nombre del fichero.bad coincida con el nombre del fichero de datos, excepto por la extension.

Saludos
  #3 (permalink)  
Antiguo 15/02/2008, 10:12
 
Fecha de Ingreso: noviembre-2007
Ubicación: Argentina
Mensajes: 134
Antigüedad: 17 años
Puntos: 3
Re: Nombre Fichero Al Ejecutar Un Loader

Estuve buscando la manera de que puedas ingresar el archivo que tiene los datos por parametro para que fuera mas reutilizable el ctl pero me da muchos errores.

Primero vamos a crear una tabla
Código:
DROP TABLE MUCHY_POSTES_TEMP PURGE;

CREATE TABLE MUCHY_POSTES_TEMP
(
  POSTE_ID      VARCHAR2(20),
  GRADO_S       VARCHAR2(20),
  MINUTO_S      VARCHAR2(20),
  SEGUNDO_S     VARCHAR2(20),
  GRADO_W       VARCHAR2(20),
  MINUTO_W      VARCHAR2(20),
  SEGUNDO_W     VARCHAR2(20),
  ARCHIVO       VARCHAR2(100)
) TABLESPACE AUXILIAR PCTFREE 5 PCTUSED 95;
una vez creada la tabla vamos a ver el archivo y file .ctl

Código:
/example># cat muchy.txt
101 ;71  ;17  ;23.2258194  ;44  ;10  ;46.1511137
102 ;71  ;14  ;11.2537426  ;44  ;9   ;48.6688576
103 ;71  ;13  ;67.2499024  ;44  ;9   ;35.9677992
104 ;71  ;12  ;33.2457742  ;44  ;9   ;23.2688671
105 ;71  ;10  ;15.2424875  ;44  ;8   ;87.8423192
106 ;71  ;9   ;61.2398834  ;44  ;8   ;45.1369375
107 ;71  ;7   ;3.2922907   ;44  ;8   ;59.9120713
108 ;71  ;5   ;89.2736358  ;44  ;8   ;7.3165487
109 ;71  ;4   ;95.4788036  ;44  ;7   ;53.3820880
110 ;71  ;3   ;22.0644739  ;44  ;7   ;57.1804391
/example># cat muchy.ctl

LOAD DATA
INFILE '/example/muchy.txt'
TRUNCATE
INTO TABLE muchy_postes_temp
TRAILING NULLCOLS
(
  POSTE_ID      CHAR terminated by ';',
  GRADO_S       CHAR terminated by ';',
  MINUTO_S      CHAR terminated by ';',
  SEGUNDO_S     CHAR terminated by ';',
  GRADO_W       CHAR terminated by ';',
  MINUTO_W      CHAR terminated by ';',
  SEGUNDO_W     CHAR terminated by whitespace,
  ARCHIVO       CONSTANT 'muchy.txt'
)

/example># sqlldr USERID=/ CONTROL=muchy.ctl

SQL*Loader: Release 10.2.0.1.0 - Production on Fri Feb 15 14:13:32 2008

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

Commit point reached - logical record count 10

/example>#
El unico detalle es que debes escribir dentro de cada .ctl el nombre del fichero con los datos origen.

Espero que te haya servido.

Sldo Atte, Mario.
  #4 (permalink)  
Antiguo 18/02/2008, 07:49
 
Fecha de Ingreso: noviembre-2007
Ubicación: Argentina
Mensajes: 134
Antigüedad: 17 años
Puntos: 3
Re: Nombre Fichero Al Ejecutar Un Loader

Otra cosa que puedes hacer Muchy, es agregar dentro de cada archivo el nombre del mismo.
Si usas unix como pienso que si usas, puede que este comando antes del Sql Loader, te ayudara mucho.

Un poco de codigo entonces....

Código:
/example># cat muchy.txt
101 ;71  ;17  ;23.2258194  ;44  ;10  ;46.1511137
102 ;71  ;14  ;11.2537426  ;44  ;9   ;48.6688576
103 ;71  ;13  ;67.2499024  ;44  ;9   ;35.9677992
104 ;71  ;12  ;33.2457742  ;44  ;9   ;23.2688671
105 ;71  ;10  ;15.2424875  ;44  ;8   ;87.8423192
106 ;71  ;9   ;61.2398834  ;44  ;8   ;45.1369375
107 ;71  ;7   ;3.2922907   ;44  ;8   ;59.9120713
108 ;71  ;5   ;89.2736358  ;44  ;8   ;7.3165487
109 ;71  ;4   ;95.4788036  ;44  ;7   ;53.3820880
110 ;71  ;3   ;22.0644739  ;44  ;7   ;57.1804391
/example># cat muchy.txt | nawk -v F=muchy.txt '{ printf "%-10s %-10s\n", $0, F}' > muchy.tx2
/example># cat muchy.tx2
101 ;71  ;17  ;23.2258194  ;44  ;10  ;46.1511137 muchy.txt
102 ;71  ;14  ;11.2537426  ;44  ;9   ;48.6688576 muchy.txt
103 ;71  ;13  ;67.2499024  ;44  ;9   ;35.9677992 muchy.txt
104 ;71  ;12  ;33.2457742  ;44  ;9   ;23.2688671 muchy.txt
105 ;71  ;10  ;15.2424875  ;44  ;8   ;87.8423192 muchy.txt
106 ;71  ;9   ;61.2398834  ;44  ;8   ;45.1369375 muchy.txt
107 ;71  ;7   ;3.2922907   ;44  ;8   ;59.9120713 muchy.txt
108 ;71  ;5   ;89.2736358  ;44  ;8   ;7.3165487  muchy.txt
109 ;71  ;4   ;95.4788036  ;44  ;7   ;53.3820880 muchy.txt
110 ;71  ;3   ;22.0644739  ;44  ;7   ;57.1804391 muchy.txt
/example># mv muchy.tx2 muchy.txt
/example># cat muchy.ctl

LOAD DATA
INFILE '/example/muchy.txt'
TRUNCATE
INTO TABLE muchy_postes_temp
TRAILING NULLCOLS
(
  POSTE_ID      CHAR terminated by ';',
  GRADO_S       CHAR terminated by ';',
  MINUTO_S      CHAR terminated by ';',
  SEGUNDO_S     CHAR terminated by ';',
  GRADO_W       CHAR terminated by ';',
  MINUTO_W      CHAR terminated by ';',
  SEGUNDO_W     CHAR terminated by whitespace,
  ARCHIVO       CHAR terminated by whitespace
)

/example># sqlldr USERID=/ CONTROL=muchy.ctl

SQL*Loader: Release 10.2.0.1.0 - Production on Mon Feb 18 11:49:49 2008

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

Commit point reached - logical record count 10
/example>#
Dependiendo del Unix debes usar Awk o Nawk, no es muy dificil.

Mucha Suerte.

Sldo Atte, Mario.
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 12:30.