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;