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

Realizar actualización de tabla a partir de fichero

Estas en el tema de Realizar actualización de tabla a partir de fichero en el foro de Oracle en Foros del Web. Hola, Me gustaría saber cómo actualizar una tabla de la base de datos, a partir de los datos de un fichero de texto plano (obviamente ...
  #1 (permalink)  
Antiguo 24/05/2007, 09:46
 
Fecha de Ingreso: abril-2007
Mensajes: 160
Antigüedad: 17 años
Puntos: 1
Realizar actualización de tabla a partir de fichero

Hola,

Me gustaría saber cómo actualizar una tabla de la base de datos, a partir de los datos de un fichero de texto plano (obviamente bien formado, con separadores para delimitar las columnas y una línea por registro).

¿Se puede de algún modo hacer usando el bulk loader de Oracle? ¿Se puede abrir el fichero directamente con PL-SQL y con cursores pasar los datos a nuestra tabla? ¿O el mejor (y tal vez único) modo será cargando todo el fichero a otra tabla, y a partir de ahí de algún modo (PL-SQL supongo que sería) actualizar mi tabla?
  #2 (permalink)  
Antiguo 24/05/2007, 17:10
Avatar de kikolice  
Fecha de Ingreso: marzo-2004
Mensajes: 1.510
Antigüedad: 20 años, 1 mes
Puntos: 7
Re: Realizar actualización de tabla a partir de fichero

existe el sql*loader para cargar archivos planos a una tabla

con pl/sql tendrias que utilizar utl_file para leer el archivo, armar la sentencia insert e insertar el registro en la tabla
__________________
Blogzote.com :-) Mi blog
  #3 (permalink)  
Antiguo 24/05/2007, 17:12
Avatar de kikolice  
Fecha de Ingreso: marzo-2004
Mensajes: 1.510
Antigüedad: 20 años, 1 mes
Puntos: 7
Re: Realizar actualización de tabla a partir de fichero

se me olvidaba, tambien existen las tablas externas, que es a partir de ese archivo crear una tabla, aqui dejo una nota que escribi al respecto

http://www.blogzote.com/2007/01/15/t...nas-en-oracle/
__________________
Blogzote.com :-) Mi blog
  #4 (permalink)  
Antiguo 25/05/2007, 02:20
 
Fecha de Ingreso: abril-2007
Mensajes: 160
Antigüedad: 17 años
Puntos: 1
Re: Realizar actualización de tabla a partir de fichero

Cita:
Iniciado por kikolice Ver Mensaje
existe el sql*loader para cargar archivos planos a una tabla

con pl/sql tendrias que utilizar utl_file para leer el archivo, armar la sentencia insert e insertar el registro en la tabla
Ok, aunque sería construir una sentencia update. Mi duda era por si con el sql loader se podía realizar el update directamente de algún modo, o si se podía leer directamente del archivo (ahora voy a echarle un vistazo a tu link).

Saludos
  #5 (permalink)  
Antiguo 06/06/2007, 10:30
 
Fecha de Ingreso: abril-2007
Mensajes: 160
Antigüedad: 17 años
Puntos: 1
Re: Realizar actualización de tabla a partir de fichero

Entonces, ¿no existe ningún módulo o aplicación para realizar actualizaciones masivas a partir de ficheros? ¿el sql loader sólo puede realizar inserts?
  #6 (permalink)  
Antiguo 06/06/2007, 14:21
(Desactivado)
 
Fecha de Ingreso: junio-2007
Mensajes: 14
Antigüedad: 16 años, 10 meses
Puntos: 0
Re: Realizar actualización de tabla a partir de fichero

EXTERNAL TABLES + MERGE posiblemente es lo que necesites.
  #7 (permalink)  
Antiguo 07/06/2007, 03:05
 
Fecha de Ingreso: abril-2007
Mensajes: 160
Antigüedad: 17 años
Puntos: 1
Re: Realizar actualización de tabla a partir de fichero

¿Qué es Merge? He visto algunos links sobre él, como w w w.dba-oracle.com/oracle_tips_rittman_merge.htm y download-west.oracle.com/docs/cd/B10501_01/server.920/a96520/transfor.htm#14183

Parece interesante, sobre todo para realizar inserts y updates al mismo tiempo.

Pero es que no sé bien qué es: ¿un lenguaje propio? ¿una instrucción de sql? Parece que sí lo único que quieres hacer es updates, al final haces lo mismo que con pl-sql y updates directamente.
  #8 (permalink)  
Antiguo 07/06/2007, 07:45
(Desactivado)
 
Fecha de Ingreso: junio-2007
Mensajes: 14
Antigüedad: 16 años, 10 meses
Puntos: 0
Re: Realizar actualización de tabla a partir de fichero

Es un DML, como el insert,update o delete. Te sirve para un clasico problema de updatear si existe e insertar si no existe. Imagina que tenes que leer un archivo y para cada registro, o bien updateas un registro que existe o en caso de no existir lo insertas. Eso lo podes resolver con un MERGE, haciendo todo en un paso : lectura de archivo ( via external table ) + insert / update segun corresponda.
  #9 (permalink)  
Antiguo 31/10/2007, 15:50
rmp
 
Fecha de Ingreso: octubre-2007
Mensajes: 12
Antigüedad: 16 años, 6 meses
Puntos: 0
Realizar actualización de tabla a partir de fichero

Que tal...

Tengo una duda... es posible hacer lo que comentas ya del MERGE desde un script de linux.

Si es pocible me podrias explicar como hacer eso.

Mi problema es el siguiente:

* Tengo que actualizar 3 campos de ua tabla a partir de un archivo plano.
* Mi archivo plano cuenta con 5 campos; los primeros 2 de llaves primarias y los ultimos 3 son loos campos que necesito actualizar.

Lo importante es que todo debe quedar en un script para que lo haga de forma automatica cada cierto periodo.

Espero me puedan ayudar, llevo tres dias con este problema y no se como salir de él.


SALUDOS!!!
  #10 (permalink)  
Antiguo 01/11/2007, 15:39
Avatar de matanga  
Fecha de Ingreso: octubre-2007
Ubicación: España
Mensajes: 1.091
Antigüedad: 16 años, 6 meses
Puntos: 85
Re: Realizar actualización de tabla a partir de fichero

Hola,

Un poco del entorno.

Código:
oracle@buo:~/scripts/data> pwd
/home/oracle/scripts/data

oracle@buo:~/scripts/data> cat nombres.dat 
1|"nombre 1"
2|"nombre 2"
3|"nombre 3"
4|"nombre 4"
5|"nombre 5"
6|"nombre 6"
7|"nombre 7"
8|"nombre 8"
9|"nombre 9"
Estoy trabajando en un directorio con contiene los datos externos, esto estaria bien definirlo de antemano, asi puede alojar todos los datos externos en una sola ubicacion y tambien puedes hacer backups.


Código:
CREATE OR REPLACE DIRECTORY external_data
    AS '/home/oracle/scripts/data';

CREATE TABLE external_table
                   (id       NUMBER, 
                    nombre   VARCHAR2(100)
                   ) 
     ORGANIZATION EXTERNAL 
     ( 
       TYPE ORACLE_LOADER 
       DEFAULT DIRECTORY external_data 
       ACCESS PARAMETERS 
       ( 
         records delimited by newline 
         badfile external_data:'nombres.bad' 
         logfile external_data:'nombres.log' 
         fields terminated by '|' 
         missing field values are null 
         ( id, nombre ) 
       ) 
       LOCATION ('nombres.dat') 
     ) 
;
Ahora creamos un objeto directorio y la tabla externa que se alimenta con el fichero nombres.dat. Las tablas externas utilizan el motor del SQL*Loader para la carga de datos, asi que puedes esperar que esto sea rapido.

Código:
SQL> set lines 150
SQL> col nombre format a40
SQL> select * from external_table;

        ID NOMBRE
---------- ----------------------------------------
         1 "nombre 1"
         2 "nombre 2"
         3 "nombre 3"
         4 "nombre 4"
         5 "nombre 5"
         6 "nombre 6"
         7 "nombre 7"
         8 "nombre 8"
         9 "nombre 9"

9 rows selected.
Ya tienes acceso al fichero nombres.dat a traves de una tabla externa.

Código:
SQL> create table t1 (id number, nombre varchar2(100));

Table created.

SQL> select * from t1;

no rows selected
Creamos la tabla de destino, la que actualizaremos con el merge.

Código:
MERGE INTO t1 D
   USING (SELECT id, nombre FROM external_table) S
   ON (D.id = S.id)
   WHEN MATCHED THEN UPDATE SET D.nombre = S.nombre
   WHEN NOT MATCHED THEN INSERT (D.id, D.nombre)
     VALUES (S.id, S.nombre)
;

9 rows merged.
Ejecutamos la siguiente sentencia SQL....

Código:
SQL> select * from t1;

        ID NOMBRE
---------- ----------------------------------------
         1 "nombre 1"
         2 "nombre 2"
         3 "nombre 3"
         4 "nombre 4"
         5 "nombre 5"
         6 "nombre 6"
         7 "nombre 7"
         8 "nombre 8"
         9 "nombre 9"

9 rows selected.
Listo!!, ahora lo unico que queda por hacer es un cron que copie el fichero nombres.dat al directorio de datos y ejecute la sentencia MERGE.

Saludos
  #11 (permalink)  
Antiguo 05/11/2007, 09:08
rmp
 
Fecha de Ingreso: octubre-2007
Mensajes: 12
Antigüedad: 16 años, 6 meses
Puntos: 0
Re: Realizar actualización de tabla a partir de fichero

Gracias Maganta!!!

Tu explicación esta super clara y facil de entender.

Saludos!!!!
  #12 (permalink)  
Antiguo 05/11/2007, 12:54
Avatar de matanga  
Fecha de Ingreso: octubre-2007
Ubicación: España
Mensajes: 1.091
Antigüedad: 16 años, 6 meses
Puntos: 85
Re: Realizar actualización de tabla a partir de fichero

Hola,

Me alegra, gracias a ti por el feedback.

Saludos
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 17:07.