ORACLE SPOOL GENERAR ARCHIVO TXT Y RENOMBRARLO CON SYSDATE

Dentro de mis labores como Analista de Sistemas me fue solicitado un trabajo especial para automatizar la generación de una consulta de datos a la BD Oracle y se me especifico que debía depositar la data generada en un archivo plano de texto TXT formateado con ciertas especificaciones. 

Las características solicitadas por el OWNER eran que la data se vaciara en un archivo de texto de N registros en 02 columnas con cada registro separado por ";" de esta manera:

  lado_izquierdo;lado_derecho  

Ademas se detallo que el archivo generado fuese renombrado con la fecha del SO del servidor en el momento que se lanzaba la consulta.

Investigando un poco y analizando la solicitud, llegue a la conclusión de que Spool como herramienta de SQL Plus en Oracle me venia perfecta para cumplir el objetivo encargado.

La documentacion oficial de Oracle declara que Spool es una herramienta que almacena el resultado de una consulta en un archivo e incluso puede remitirse el mismo a la impresora.

 SPO[OL] [file_name[.ext] [CRE[ATE] | REP[LACE] | APP[END]] | OFF | OUT]

El comando tiene un amplio conjunto de configuraciones SET (le dicen Seteos) que permiten formatear la salida de resultados con cierta gracia.  (Puedes consultarlos aqui).

Yo necesitaba que el reporte generado no tuviera cabeceras, ciertas dimensiones de la pagina, que no se mostrara en la consola cuando se ejecutara la consulta su resultado y que se eliminaran los espacios vacíos al final de cada linea del Spool.

Todas esas características para el reporte generado las podía obtener con el SET del Spool y que se genera según voy a mostrar mas abajo antes de lanzar el comando.

Ahora, viene la otra parte que debo confesar, apenas hoy pude resolver y con la intervención de otra mente en el negocio.  

La segunda parte del trabajo consistía en que el archivo generado por Oracle Spool fuese renombrado con SYSDATE a la fecha del servidor en el formato siguiente:

 YYYYMMDDHHMMSS.txt

Surfeando la web a través de Google llegue a un fabuloso articulo de hace algunos anos y que muestra un ejemplo sencillo para guiarse en este caso.  Sin embargo a mi no me funcionaba y resulta que pues de tanto intentar me sentía quemado y había aplazado el asunto hasta el día de hoy que conversando el caso con un compañero de trabajo me dijo: pero viendo el código lo único que te puedo decir es que renombres las variables e intentes de nuevo.  Y así fue, cambie el nombre (tenia un error porque las había llamado muy parecido) y !!!Woala!!!...  funciono de maravilla.

Aquí mi primer ejemplo a seguir y con el que fracase por un error en los nombres:

http://www.dba-oracle.com/t_adding_sysdate_sql_plus_spool_file_name.htm

 sqlplus user/password col spoolname new_value spoolname select 'invoice_'||to_char(sysdate, 'yymmdd') spoolname from dual spool '&spoolname' select stuff . . . . spool off


El error estaba en la segunda linea que puedes observar spoolname repite su nombre.

col spoolname new_value spoolname

La solución la comparto con ustedes comunidad y espero solucione parte de sus dudas de las cuales ya pude aportar mi granito de arena.  De esta manera funciono y logre el desempeño que esperaba.



SET PAGESIZE 1000 LINESIZE 200 ECHO OFF TRIMS OFF FEEDBACK OFF HEA OFF
col VALOR1 new_value VALOR2
select to_char(sysdate, 'YYYYMMDDHH24MISS')||'.txt' VALOR1 from dual;
SPOOL &VALOR2
select lado_izquierdo||";"||lado_derecho from datos
SPOOL OFF

No dejen de comentar si les sirvió...



Comentarios

  1. Gracias por compartir esta herramienta, pero me gustaría preguntar cómo puedo hacer para que el archivo txt que genero no sea editable, de tal manera que asegure la información que extraigo de mi base de datos.
    Gracias de antemano por tu comentario.

    ResponderEliminar
  2. Este comentario ha sido eliminado por el autor.

    ResponderEliminar

Publicar un comentario