até o momento sempre trabalhei com o UTL_FILE_DIR para a exportação de arquivos pelo DB, até ai tudo certo, 100%.
Mas em um cliente o dba instalou o oracle 11g, segue:
Oracle Database 11g Release 11.2.0.1.0 - 64bit Production
PL/SQL Release 11.2.0.1.0 - Production
CORE 11.2.0.1.0 Production
TNS for Linux: Version 11.2.0.1.0 - Production
NLSRTL Version 11.2.0.1.0 - Production
Isso mudou no Oracle 11g, eles vão ter que criar um diretório no banco de dados via CREATE DIRECTORY e pesquisar como é feito agora.
O parametro que o Alexandre viu não serve mais, só em mantido pra efeito de compatibilidade com versões anteriores do banco;
Fiz os procedimento que esse artigo orientou:
http://eduardolegatti.blogspot.com/2009 ... lob-e.html
Verifiquei se o parâmetro esta ok, conforme codigo:
SQL> select * from dba_directories;
OWNER DIRECTORY_NAME DIRECTORY_PATH
------------------------------ ------------------------------ --------------------------------------------------------------------------------
SYS ORACLE_OCM_CONFIG_DIR /oracle/product/11.2.0/ccr/state
SYS DATA_PUMP_DIR /oracle/admin/orcl2/dpdump/
SYS ARQUIVO_DIR /home/setores/nfe
SYS UTL_FILE /home/setores/nfe
SQL> select grantor, grantee, table_name, privilege
2 from all_tab_privs
3 where table_name = 'ARQUIVO_DIR';
GRANTOR GRANTEE TABLE_NAME PRIVILEGE
------------------------------ ------------------------------ ------------------------------ ----------------------------------------
SYS TECTEXTIL ARQUIVO_DIR EXECUTE
TECTEXTIL PUBLIC ARQUIVO_DIR READ
SYS TECTEXTIL ARQUIVO_DIR READ
TECTEXTIL PUBLIC ARQUIVO_DIR WRITE
SYS TECTEXTIL ARQUIVO_DIR WRITE
declare
v_arquivo utl_file.file_type;
begin
v_arquivo := utl_file.fopen('ARQUIVO_DIR', 'arq_teste.txt', 'W');
utl_file.put_line(v_arquivo, 'linha 1');
utl_file.put_line(v_arquivo, 'linha 2');
utl_file.put_line(v_arquivo, 'linha 3');
utl_file.put_line(v_arquivo, 'linha 4');
utl_file.put_line(v_arquivo, 'linha 5');
utl_file.fclose(v_arquivo);
exception
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE(sqlerrm);
UTL_FILE.FCLOSE(v_arquivo);
end;
ORA-29283: operação de arquivo inválida
ORA-06512: em "SYS.UTL_FILE", line 536
ORA-29283: operação de arquivo inválida
Alguém tem alguma sugestão?
sera que o parâmetro utl_file_dir tem que estar com permissão também de gravação?
Abraço!