Oracle - almacenar actualizaciones en archivo txt

 
Vista:

almacenar actualizaciones en archivo txt

Publicado por iley (3 intervenciones) el 30/10/2007 23:46:14
saludos a todos lo participantes del foro..

antes de decir mi duda , quiero agregar que me gusta mucho el trabajo que se realiza en este foro son de mucha ayuda ..

ok.. mi pregunta es asi : necesito crear un procedimiento en pl/sql, que me permita almacenar en un archivo de texto las actualizaciones o modificaciones que se hacen en una tabla X , pero que solo almacene el nombre de la tabla lo que se realizo( nuevo registro o actualizacion ) y la fecha del sistema..

segun se que hay una funcion para hacer eso.. pero no la eh encontrado

agradezco la atencion y gracias ..
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:almacenar actualizaciones en archivo txt

Publicado por Rodolfo Reyes (445 intervenciones) el 31/10/2007 15:24:11
Para comenzar yo crearia un trigger de after update sobre la tabla, y desde este trigger mandaria a llamar a un procedimiento almacenado al cual le enviaria paramatros como Nombre de Tabla, Fecha, Hora, usuario, etc. Para que guarde la información en el archivo de texto.

El paquete que tienes que utilizar para manipular archivos desde la base un procedimiento almacenado es "utl_file".

Lo que te pongo es una explicación de como leer un archivo, pero ta da una muy buena idea de lo que tendrias que hacer para escribir en un archivo:

1. Definís un directorio en el servidor (a nivel de Sistema Operativo) donde vas
a guardar tus archivos, supongamos que el mismo está en el disco C, y sea
c:\archivos. Le das permisos de lectura y escritura en dicho directorio al
usuario Oracle (que es quien ejecuta los procesos almacenados en la base). Este
último paso también a través de las herramientas del S.O.

2. Toda base de datos arranca con un archivo de parámetros, que es un archivo
auxiliar que le permite al motor definir el tamaño de las estructuras de
memoria de la instancia, validar los archivos de la base, etc., en definitiva,
iniciar la base de datos para que quede disponible para su uso. Dependiendo de
la versión de base de datos que usés, podés tener 2 tipos distintos de arhivos
de inicialización (antes de 9i sólo existía uno, el initXXX.ora). Los archivos
pueden ser el initXXX.ora (donde XXX es el nombre de la instancia de la base de
datos) o el spfile, que es un archivo binario, nuevo a partir de 9i (y el usado
por defecto a partir de dicha versión) y que te permite cambiar ciertos
parámetros y que dicha actualización se realice en el momento, es decir, sin
reiniciar la base como te ocurre con el primer tipo de archivos. Bueno, toda
esta perorata es sólo para decirte que es acá donde tenés que definir el
parámetro UTL_FILE_DIR, aunque te aviso que el mismo no se puede cambiar
online, por lo que vas a tener que reiniciar la base una vez definido el
parámetro. Supongamos que tenés el archivo de inicialización initDB.ora
(archivo de texto). Simplemente definís el parámetro así:

utl_file_dir = c:\archivos

3. En la base, vas a tener que crear un objecto directorio, estos objetos son
propiedad del usuario SYS, aunque los crees en otros esquemas. Un objecto
directorio es, simplemente, un alias para referirse dentro de la base a un
directorio físico del sistema de archivos del S.O.. Para crear dicho objeto,
simplemente:

CREATE DIRECTORY MI_DIR AS 'C:\ARCHIVOS';

Luego le damos permiso de lectura y escritura al usuario/esquema oracle que va a
ejecutar el procedimiento almacenado para que tenga acceso al directorio con:

GRANT WRITE, READ ON DIRECTORY MI_DIR TO usuario;

4. Después de haber hecho todo lo anterior, ya podrás usar el procedimiento que
definiste para leer y escribir archivos de texto en una carpeta del servidor.
Espero que te haya servido. Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

ok.. muchas gracias

Publicado por iley (3 intervenciones) el 31/10/2007 23:37:04
gracias por contestarme de . tu ejemplo me ayudo a entender como hacerlo...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar