extraccion

tema enviado por betsy en ORACLE
tema iniciado el 21/02/2007

Tengo un procedimiento almacenado (EXTRACCION) que guarda en un archivo de texto (uso UTL_FILE) la información de una tabla, pero, la información a extraer de las tablas debe ser de 2 formas: desde un rango de fecha o todos los días, lo elije el usuario.

1.       Para validar todos los días cree un job de la siguiente manera:

Set ServerOutput on

declare

  n_job number;

begin

  Dbms_Job.Submit

    ( job       => n_job,

      what      => 'extraccion.CREAR_ARCHIVO('FILE_DATA','TRABAJO.TXT');',

      next_date => trunc(sysdate+1),

      interval  => 'trunc(sysdate+1)'

    );

--  Dbms_Job.Run (n_job);

--  Dbms_Output.Put_Line ('Submitted as job # ' || to_char ( n_job ) );

end;

 

pero al ejecutarlo me muestra error en el directorio (FILE_DATA) y como tengo muchas tablas cada una debe guardarse con su respectivo nombre('TRABAJO.TXT u otro’).  El problema es que no se como pasarle el nombre a cada uno de los archivos a crear.

2.       El proceso para extraer la información de un rango de fecha indicadas por el usuario no me funciona, no se si me podría ayudar.

No se si me explico pero agradecería mucho la ayuda que me puedan brindar.  Gracias.

 

CREATE OR REPLACE PACKAGE BODY EXTRACCION

IS

CURSOR TRABAJO IS

SELECT JOB_ID, JOB_TITLE, MIN_SALARY, MAX_SALARY FROM JOBS;

CURSOR PAISES IS

SELECT COUNTRY_ID, COUNTRY_NAME, REGION_ID  FROM COUNTRIES;

 

PROCEDURE cross_avgjob (p_filedir IN VARCHAR2, p_filename IN VARCHAR2)

 IS

v_fh_1 UTL_FILE.FILE_TYPE;

BEGIN

 

IF (p_filename = 'TRABAJO.TXT') THEN

v_fh_1 := UTL_FILE.FOPEN(p_filedir, p_filename, 'w');

UTL_FILE.PUTF(v_fh_1,'Employees with more than average trabajo:\n');

UTL_FILE.PUTF(v_fh_1, 'REPORT GENERATED ON %s\n\n', SYSDATE);

FOR v_emp_info IN TRABAJO

LOOP

UTL_FILE.PUTF(v_fh_1, '%s %s \n',

RPAD(v_emp_info.job_title, 30, ' '),

LPAD(TO_CHAR(v_emp_info.min_salary, '$99,999.00'), 12, ' '));

END LOOP;

UTL_FILE.NEW_LINE(v_fh_1);

UTL_FILE.PUT_LINE(v_fh_1, '*** END OF REPORT ***');

UTL_FILE.FCLOSE(v_fh_1);

ELSE

                               IF (p_filename = 'PAISES.TXT') THEN

v_fh_1 := UTL_FILE.FOPEN(p_filedir, p_filename, 'w');

UTL_FILE.PUTF(v_fh_1,'Employees with more than average trabajo:\n');

UTL_FILE.PUTF(v_fh_1, 'REPORT GENERATED ON %s\n\n', SYSDATE);

FOR v_emp_info IN PAISES

LOOP

UTL_FILE.PUTF(v_fh_1, '%s %s \n',

RPAD(v_emp_info.country_id, 30, ' '),

LPAD(v_emp_info.region_id, 12, ' '));

END LOOP;

UTL_FILE.NEW_LINE(v_fh_1);

UTL_FILE.PUT_LINE(v_fh_1, '*** END OF REPORT ***');

UTL_FILE.FCLOSE(v_fh_1);

END IF;

END IF;

 

EXCEPTION

WHEN UTL_FILE.INVALID_FILEHANDLE THEN

RAISE_APPLICATION_ERROR (-20001, 'Invalid File');

UTL_FILE.FCLOSE_ALL;

WHEN UTL_FILE.WRITE_ERROR THEN

RAISE_APPLICATION_ERROR (-20002, 'Unabled to write to file');

UTL_FILE.FCLOSE_ALL;

END cross_avgjob;

END EXTRACCION;