Não só, Sérgio : desde pelo menos o RDBMS Oracle 9i (já quase uns dez anos) a 
Oracle introduziu no database o conceito de DIRECTORIES, que são pointers, 
objetos lógicos semelhante a "sinônimos", que podem ser permissionados 
diretamente via GRANT,E alterou o UTL_FILE para poder usar um DIRECTORY como 
especificação do diretório/pasta real a ser gravado..... O parâmetro 
UTL_FILE_DIR é inclusive depreciado/ CONTRA-RECOMENDADO nos releases mais 
recentes, embora ainda aceito e possível....

  []s

    Chiappa

--- Em oracle_br@yahoogrupos.com.br, Sérgio Luiz Rodrigues Chaves 
<sergio.chaves@...> escreveu
>
> 
> Lembrando que,  o Oracle somente ira ler ou grava nos diretórios espeficiados 
> no Parameter UTL_FILE_DIR. 
> 
> Att. 
> 
> Sérgio Chaves. 
> 
> 
> 
> 
> 
> ----- Mensagem original -----
> 
> De: "J. Laurindo Chiappa" <jlchiappa@...> 
> Para: "oracle br" <oracle_br@yahoogrupos.com.br> 
> Enviadas: Sexta-feira, 16 de Agosto de 2013 13:28:01 
> Assunto: [oracle_br] Re: Gerar arquivo texto em PL-SQL 
> 
>   
> 
> 
> 
> opa, então : dado o fato que a UTL_FILE é uma package que reside dentro do 
> banco de dados, ela só consegue fazer I/O em arquivos que estejam em 
> pastas/diretórios/paths acessíveis localmente ao servidor Oracle.... Para que 
> um arquivo/diretório/pasta seja acessível ele TEM que residir no servidor 
> Oracle ** OU ** tem que haver algum software que MAPEIE o caminho até a 
> máquina remota (o seu PC cliente, imagino) : poderia ser um mount-point NFS, 
> um share Samba, um compartilhamento de rede Windows (se o servidor Oracle é 
> capaz de conectar numa rede Windows), enfim, mas vc TERIA que ter algo a 
> mais... 
> Ainda usando UTL_FILE, uma outra opção seria vc criar o arquivo num path 
> local do servidor Oracle mesmo, e DEPOIS transferir o arquivo para a 
> máquina-destino, via ftp, ssh, rsh, ou um meio qualquer.... 
> 
> Já se não é exigido que seja necessariamente usado o UTL_FILE pra gerar o 
> arquivo-local com os dados vindos do database Oracle, aí o procedimento é 
> conectar no database Oracle com uma tool cliente qualquer , fazer a consulta 
> que vc quer e depois exportar os dados que estão na tela da tool : a 
> Esmagadora maioria delas faz isso, INCLUSIVE o Oracle SQL Developer que vc 
> diz que tem/usa - nele o procedimento é selecionar o resultado no grid, click 
> com botão direito e usar a opção de exportar para arquivo.... No SQLPLUS, que 
> é outra tool cliente bastante usada/conhecida, vc usaria ocomando de SPOOL... 
> 
> []s 
> 
> Chiappa 
> 
> --- Em oracle_br@yahoogrupos.com.br , Otavio Wollny <otavio.wollny@> escreveu 
> > 
> > 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] 
> > 
> 
> 
>  
> 
> 
> [As partes desta mensagem que não continham texto foram removidas]
>


Responder a