I have a job that calls a procedure to generate a text file with all the names of employees in a company:
job code:
BEGIN
BEGIN
SYS.DBMS_SCHEDULER.DROP_JOB('job_criarquivo');
EXCEPTION WHEN OTHERS THEN NULL;
END;
dbms_scheduler.create_job(
job_name => 'JOB_CRIARQUIVO',
job_type => 'STORED_PROCEDURE',
job_action => 'CRIARARQUIVOTXT',
ENABLED => TRUE,
AUTO_DROP => TRUE,
START_DATE => SYSDATE,
REPEAT_INTERVAL => 'FREQ=SECONDLY; BYSECOND=0,10,20,30,40,50');
END;
Procedure code to generate the txt file:
CREATE OR REPLACE PROCEDURE CRIARARQUIVOTXT AS
Arquivo_saida UTL_File.File_Type;
Dir_Arq VARCHAR2(60);
Cursor cur_arq is
Select f.NOME linha from tfuncionario f ;
BEGIN
-- Diretorio do Arquivo
Dir_Arq := 'C:\Users\alex.jose.silva\Documents\testes';
-- Abrindo o arquivo para a gravação
Arquivo_saida := UTL_File.Fopen(Dir_Arq, 'teste.txt','w' );
-- Abrindo o cursor para realizar o loop das linhas que irão no arquivo
for Reg_Linha in cur_arq loop
UTL_File.Put_Line(Arquivo_Saida, Reg_Linha.linha);
end loop;
-- Fechando o arquivo
UTL_File.Fclose(Arquivo_Saida);
Dbms_Output.Put_Line('Arquivo gerado com sucesso.');
Exception
WHEN UTL_FILE.INVALID_OPERATION THEN
Dbms_Output.Put_Line('Operação inválida no arquivo.');
UTL_File.Fclose(Arquivo_saida);
WHEN UTL_FILE.WRITE_ERROR THEN
Dbms_Output.Put_Line('Erro de gravação no arquivo.');
UTL_File.Fclose(Arquivo_saida);
WHEN UTL_FILE.INVALID_PATH THEN
Dbms_Output.Put_Line('Diretório inválido.');
UTL_File.Fclose(Arquivo_saida);
WHEN Others THEN
Dbms_Output.Put_Line('Problemas na gravação do arquivo.');
UTL_File.Fclose(Arquivo_saida);
END CRIARARQUIVOTXT;
Error message: