{"id":916,"date":"2014-04-14T21:23:23","date_gmt":"2014-04-14T19:23:23","guid":{"rendered":"http:\/\/clemente.pamplona.name\/dba\/?p=916"},"modified":"2014-04-15T13:11:41","modified_gmt":"2014-04-15T11:11:41","slug":"escribir-la-salida-de-un-sql-en-un-fichero-con-utl_file","status":"publish","type":"post","link":"http:\/\/clemente.pamplona.name\/dba\/escribir-la-salida-de-un-sql-en-un-fichero-con-utl_file\/","title":{"rendered":"Escribir la salida de un sql en un fichero con UTL_FILE"},"content":{"rendered":"<p>Vamos con  otra entrada b\u00e1sica para dummies.<\/p>\n<p>Supongamos que queremos hacer implantar alg\u00fan tipo de sonda que nos haga una pregunta a la base de datos y nos deje el resultado en un directorio.<br \/>\nVamos a crear un peque\u00f1o procedimiento que, a modo  de ejemplo nos saque algunos par\u00e1metros del <i> v$session <\/i> y nos lo deje en un directorio previamente definido llamado SONDA<\/p>\n<pre>\r\nCREATE OR REPLACE PROCEDURE proc_a_file AS\r\n     fichero utl_file.file_type;\r\n     nombre_fichero  VARCHAR2(255);\r\n     linea_resul  VARCHAR2(255);\r\n        BEGIN\r\n  -- Definimos el nombre del log de salida\r\n     select  'sonda_'||\r\n              to_char(TO_CHAR(sysdate, 'YYYYMMDDHHmiss'))||\r\n             '.log'\r\n              into nombre_fichero  from dual  ;\r\n  -- Abrimos fichero      \r\n       fichero := utl_file.fopen('SONDA', nombre_fichero, 'A');\r\n  -- A\u00f1adimos encabezado   \r\n           UTL_FILE.PUT_LINE ( fichero ,'SID, SERIAL,TERMINAL,OSUSER');\r\n  -- Lanzamos consulta        \r\n                     FOR ciclo IN (\r\n                         SELECT\r\n                              select sid SID,\r\n                              serial#  SERIAL,\r\n                              terminal TEMINAL,\r\n                              osuser  USER  \r\n                         from v$session\r\n                               )\r\n                  LOOP  --Bucle de scritura de datos \r\n                 UTL_FILE.PUT_LINE ( fichero ,ciclo.SID||\r\n                                              chr(44)|| \r\n                                             ciclo.SERIAL||\r\n                                              chr(44)|| \r\n                                            ciclo.TERMINAL||\r\n                                            chr(44)||\r\n                                            ciclo.USER);\r\n                 END LOOP;         \r\n-- Limpiamos y cerramos\r\n          utl_file.fflush(fichero);\r\n        utl_file.fclose(fichero);\r\n-- Excepciones de error en el alert.log\r\n    EXCEPTION\r\n    WHEN UTL_FILE.WRITE_ERROR THEN\r\n    dbms_system.ksdwrt(2, 'ORA-XXXX  Error en procedure proc_a_file escrbiendo en fichero de log.');\r\n    WHEN others THEN\r\n       dbms_system.ksdwrt(2, 'ORA-XXXX  Error gen\u00e9rico en procedure   proc_a_file. '||SQLERRM);\r\n      END proc_a_file; -- En del procedure\r\n<\/pre>\n<p>Ahora ya podemos lanzar nuestro procedimiento, bien desde el c\u00f3digo de aplicaci\u00f3n, cron, task manager, trigger o desde el lugar que deseemos <\/p>\n","protected":false},"excerpt":{"rendered":"<p>Vamos con otra entrada b\u00e1sica para dummies. Supongamos que queremos hacer implantar alg\u00fan tipo de sonda que nos haga una pregunta a la base de datos y nos deje el resultado en un directorio. Vamos a crear un peque\u00f1o procedimiento &hellip; <a href=\"http:\/\/clemente.pamplona.name\/dba\/escribir-la-salida-de-un-sql-en-un-fichero-con-utl_file\/\">Sigue leyendo <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[9,41,7],"tags":[248,256,155],"class_list":["post-916","post","type-post","status-publish","format-standard","hentry","category-dummie","category-sistema-operativo","category-sqlplus","tag-dummie","tag-plsql","tag-utl_file"],"_links":{"self":[{"href":"http:\/\/clemente.pamplona.name\/dba\/wp-json\/wp\/v2\/posts\/916","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/clemente.pamplona.name\/dba\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/clemente.pamplona.name\/dba\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/clemente.pamplona.name\/dba\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/clemente.pamplona.name\/dba\/wp-json\/wp\/v2\/comments?post=916"}],"version-history":[{"count":3,"href":"http:\/\/clemente.pamplona.name\/dba\/wp-json\/wp\/v2\/posts\/916\/revisions"}],"predecessor-version":[{"id":919,"href":"http:\/\/clemente.pamplona.name\/dba\/wp-json\/wp\/v2\/posts\/916\/revisions\/919"}],"wp:attachment":[{"href":"http:\/\/clemente.pamplona.name\/dba\/wp-json\/wp\/v2\/media?parent=916"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/clemente.pamplona.name\/dba\/wp-json\/wp\/v2\/categories?post=916"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/clemente.pamplona.name\/dba\/wp-json\/wp\/v2\/tags?post=916"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}