Bom dia.

Tenho uma dúvida com relação a função "UTL_File.Fopen": o arquivo de saida
somente será gravado em uma pasta configurada no servidor Oracle, ou posso
salvar em uma pasta local (em meu desktop p.ex.)? (estou utilizando o
Oracle SQL Developer - 3.2.20.09).

Quando executo a rotina que criei (é a primeira vez que crio este tipo de
rotina) somente é exibida a mensagem:
-------------------------
Relatório de erro:
ORA-06550: linha 24, coluna 19:
PLS-00306: número incorreto de tipos de argumentos na chamada para 'FOPEN'
ORA-06550: linha 24, coluna 2:
PL/SQL: Statement ignored
06550. 00000 -  "line %s, column %s:\n%s"
*Cause:    Usually a PL/SQL compilation error.
*Action:
-------------------------

Segue o script criado:
-------------------------
DECLARE
 arquivo_saida UTL_File.File_Type;
 Dir_Arq VARCHAR2(60);

 Cursor Cur_Linha is
   select pc.filial||';'||
          pc.numpedc||';'||
          pc.status||';'||
          pc.fornecedor||';'||
          fr.nome||';'||
          pc.dt_emissao||';'||
          pc.dt_pedido||';'||
          pc.val_total_pedido||';'||
          pc.cod_usuario as linha
     from pedido_compra pc, fornec fr
    where fr.codigo = pc.fornecedor
      and dt_emissao between to_date('01/01/2013','dd/mm/yyyy') and
to_date('08/08/2013','dd/mm/yyyy')
      and cod_usuario = 'ELOAS'
    order by dt_emissao;

BEGIN
 Dir_Arq := 'C:\temp\';

 arquivo_saida := UTL_File.Fopen(Dir_Arq, arquivo_saida, 'W', 256);

 For Reg_Linha in Cur_linha Loop
   UTL_File.Put_Line(arquivo_saida, Reg_linha.linha);
 End Loop;

 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 UTL_FILE.INVALID_MODE THEN
   Dbms_Output.Put_Line('Modo de acesso inválido.');
   UTL_File.Fclose(arquivo_saida);
 WHEN Others THEN
   Dbms_Output.Put_Line('Problemas na geração do arquivo.');
   UTL_File.Fclose(arquivo_saida);
END;
-------------------------

Desde já agradeço a colaboração.


Att,

-- 
Otavio S Wollny


[As partes desta mensagem que não continham texto foram removidas]

Responder a