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] >