Colega, excusas desnecessárias aqui, se realmente vc "captou" a mensagem e corrigiu onde estava errando (pelo trecho de programa apresentado, parece que sim), ok, é o nosso objetivo, mostrar o correto. No caso, em a sintaxe estando correta (como parece estar), novamente repito, só pode ser problema de autorização. Vou dar uma demonstração mais completa, para que vc reproduza no seu caso e ache o ponto. Primeiro de tudo, acho que outros colegas já falaram mas digo de novo, UTL_FILE serve ** apenas ** para arquivos locais NO SERVIDOR ORACLE, é lá que vc vai se conectar (via telnet, ou mesmo localmente no console) pras verificações, antes de começar a programar. No caso abaixo conectei via telnet : cob:prd:/trafico/cob_adm>whoami cob_adm o UTL_FILE roda sob a conta do dono do Oracle, vamos ver quem é ele : cob:prd:/trafico/cob_adm>ps -ef | grep -i pmon oracle 17553 1 1 Mar 18 ? 1:49 ora_pmon_PRD opa, o usuário correto se chama oracle, vou conectar com ele :
cob:prd:/transfer>su - oracle Password: ok, vamos ver que grupos de permissões ele participa : sid=PRD:prd:/u1/app/oracle>groups dba cob digamos que eu quero ler/gravar arquivos em /transfer/fs_test/ , vamos ver as permissões NÂO apenas do diretório, mas do(s) sub(s) também : cob:prd:/transfer>ls -ltd /transfer drwxrwxr-x 4 cob cob 8192 Mar 24 10:54 /transfer cob:prd:/transfer>ls -ltd /transfer/fs_test drwxrwxr-x 2 cob cob 96 Mar 24 10:54 /transfer/fs_test => vamos ver se o usuário oracle pode usar : sid=PRD:prd:/u1/app/oracle>cd /transfer/fs_test sid=PRD:prd:/transfer/fs_test>touch t.txt sid=PRD:prd:/transfer/fs_test>ls -ltr total 0 -rw-r--r-- 1 oracle dba 0 Mar 24 11:07 t.txt ok, apesar de não pertencerem ao usuário que o utl_file vai utilizar (oracle), para o grupo cob as permissões estão rwx, como o oracle está nesse grupo vai poder ler/gravar na boa. Vou pro sql*plus e vamos programar : [EMAIL PROTECTED]:SQL>create directory dir_saida as '/transfer/fs_test/'; Diretório criado. ==> veja que se eu não colocar as aspas na hora de criar, ele assume maiúsculas pro identificador : [EMAIL PROTECTED]:SQL>select * from dba_directories; OWNER DIRECTORY_NAME ---------------- ------------------------------ DIRECTORY_PATH -------------------------------------------------------------- SYS UDUMP /u1/app/oracle/admin/PRD/udump SYS DIR_SAIDA /transfer/fs_test/ ==> assim, se eu especificar minusculas, não vai encontrar : [EMAIL PROTECTED]:SQL>get afiedt.buf 1 DECLARE 2 v_arq_ret UTL_FILE.file_type; 3 BEGIN 4 v_arq_ret:= utl_file.fopen('dir_saida','teste.csv','W',32767); 5 For Reg_Linha in (select * FROM scott.dept) Loop 6 UTL_File.put_line(v_arq_ret,Reg_Linha.DEPTNO); 7 UTL_File.put_line(v_arq_ret ,Reg_Linha.DNAME); 8 End Loop; 9 UTL_File.Fclose(v_arq_ret); 10 Dbms_Output.Put_Line('Arquivo gerado com sucesso.'); 11 EXCEPTION 12 WHEN UTL_FILE.INVALID_OPERATION THEN 13 Dbms_Output.Put_Line('Operagco invalida no arquivo.'); 14 UTL_File.Fclose(v_arq_ret); 15 WHEN UTL_FILE.WRITE_ERROR THEN 16 Dbms_Output.Put_Line('Erro de gravagco no arquivo.'); 17 UTL_File.Fclose(v_arq_ret); 18 WHEN UTL_FILE.INVALID_PATH THEN 19 Dbms_Output.Put_Line('Diretsrio invalido.'); 20 UTL_File.Fclose(v_arq_ret); 21 WHEN UTL_FILE.INVALID_MODE THEN 22 Dbms_Output.Put_Line('Modo de acesso invalido.'); 23 UTL_File.Fclose(v_arq_ret); 24 WHEN Others THEN 25 Dbms_Output.Put_Line('Problemas na geragco do arquivo.'); 26 UTL_File.Fclose(v_arq_ret); 27* END; [EMAIL PROTECTED]:SQL>/ Diretsrio invalido. ==> agora com o nome como armazenado : [EMAIL PROTECTED]:SQL>ed Gravou arquivo afiedt.buf 1 DECLARE 2 v_arq_ret UTL_FILE.file_type; 3 BEGIN 4 v_arq_ret:= utl_file.fopen('DIR_SAIDA','teste.csv','W',32767); 5 For Reg_Linha in (select * FROM scott.dept) Loop 6 UTL_File.put_line(v_arq_ret,Reg_Linha.DEPTNO); 7 UTL_File.put_line(v_arq_ret ,Reg_Linha.DNAME); 8 End Loop; 9 UTL_File.Fclose(v_arq_ret); 10 Dbms_Output.Put_Line('Arquivo gerado com sucesso.'); 11 EXCEPTION 12 WHEN UTL_FILE.INVALID_OPERATION THEN 13 Dbms_Output.Put_Line('Operagco invalida no arquivo.'); 14 UTL_File.Fclose(v_arq_ret); 15 WHEN UTL_FILE.WRITE_ERROR THEN 16 Dbms_Output.Put_Line('Erro de gravagco no arquivo.'); 17 UTL_File.Fclose(v_arq_ret); 18 WHEN UTL_FILE.INVALID_PATH THEN 19 Dbms_Output.Put_Line('Diretsrio invalido.'); 20 UTL_File.Fclose(v_arq_ret); 21 WHEN UTL_FILE.INVALID_MODE THEN 22 Dbms_Output.Put_Line('Modo de acesso invalido.'); 23 UTL_File.Fclose(v_arq_ret); 24 WHEN Others THEN 25 Dbms_Output.Put_Line('Problemas na geragco do arquivo.'); 26 UTL_File.Fclose(v_arq_ret); 27* END; [EMAIL PROTECTED]:SQL>/ Arquivo gerado com sucesso. Procedimento PL/SQL concluído com sucesso. ==> vamos olhar no unix : sid=PRD:prd:/transfer/fs_test>ls -ltr total 16 -rw-r--r-- 1 oracle dba 0 Mar 24 11:07 t.txt -rw-r--r-- 1 oracle dba 90 Mar 24 11:16 teste.csv sid=PRD:prd:/transfer/fs_test>cat teste.csv 10 ACCOUNTING 20 RESEARCH 30 SALES 40 OPERATIONS 77 Depto 77 78 Ação 50 Pólen 43 Depto 43 ==> vou mudar a permissão , pra que o usuário oracle só possa LER (e já que o W é de Write, só vai mesmo poder dar pau) : cob:prd:/transfer>chmod o-rwx fs_test cob:prd:/transfer>chmod g-rwx fs_test cob:prd:/transfer>chmod g+r fs_test cob:prd:/transfer>chmod o+r fs_test cob:prd:/transfer>ls -ltd fs_test drwxr--r-- 2 fco fco 96 Mar 24 11:16 fs_test ==> vou executar o programa lá na máq.cliente : [EMAIL PROTECTED]:SQL>/ Operagco invalida no arquivo. Procedimento PL/SQL concluído com sucesso. ==> confere??? []s Chiappa --- Em oracle_br@yahoogrupos.com.br, Luiz Claudio Felicio <[EMAIL PROTECTED]> escreveu > > Jlchippa!!! Valeu pela diga, mas meu camarda, desculpe pela minha existência, verifique por favor se o mesmo esta errado, pois estou tomando como Operação invalida no arquivo. Segue o meu código: > > CREATE OR REPLACE PROCEDURE p_geracsv as > > > BEGIN > > > DECLARE > v_arq_ret UTL_FILE.file_type; > > Cursor Cur_Linha is > select * FROM tmp_tar; > BEGIN > v_arq_ret:= utl_file.fopen('dir_saida','teste.csv','W',32767); > For Reg_Linha in Cur_linha Loop > UTL_File.put_line(v_arq_ret,Reg_Linha.ID_ENTI_CLIE); > UTL_File.put_line(v_arq_ret ,Reg_Linha.CD_TAR); > End Loop; > UTL_File.Fclose(v_arq_ret); > Dbms_Output.Put_Line('Arquivo gerado com sucesso.'); > EXCEPTION > WHEN UTL_FILE.INVALID_OPERATION THEN > Dbms_Output.Put_Line('Operagco invalida no arquivo.'); > UTL_File.Fclose(v_arq_ret); > WHEN UTL_FILE.WRITE_ERROR THEN > Dbms_Output.Put_Line('Erro de gravagco no arquivo.'); > UTL_File.Fclose(v_arq_ret); > WHEN UTL_FILE.INVALID_PATH THEN > Dbms_Output.Put_Line('Diretsrio invalido.'); > UTL_File.Fclose(v_arq_ret); > WHEN UTL_FILE.INVALID_MODE THEN > Dbms_Output.Put_Line('Modo de acesso invalido.'); > UTL_File.Fclose(v_arq_ret); > WHEN Others THEN > Dbms_Output.Put_Line('Problemas na geragco do arquivo.'); > UTL_File.Fclose(v_arq_ret); > > > END; > END p_geracsv; > > > > > > > > > > > > > > > > > > > > > > > > > > jlchiappa <[EMAIL PROTECTED]> escreveu: Eu já tinha dito em outra msg, repito : está errado não faz sentido o > que vc fez, se vc criou o diretório USE o diretório no open, E o > retorno do fopen TEM que ser pra uma variável, nunca pro diretório, > ok ?? Seria : > > create directory dir_saida as '/ora01/oracle/tmp'; > > e depois : > > DECLARE > v_arq_ret UTL_FILE.file_type; > ... > BEGIN > v_arq_ret := utl_file.fopen(dir_saida, 'teste.csv','W',32767); > > certo ?? É JUSTAMENTE essa a finalidade do diretório.... E claro, > como já falado, lá no servidor o dir /ora01/oracle/tmp TEM QUE estar > com permissão de Read e Write pro usuário dono do Oracle. > > []s > > Chiappa > --- Em oracle_br@yahoogrupos.com.br, Luiz Claudio Felicio > escreveu > > > > Galera preciso gerar um arquivo em txt.csv através do ult_file, mas > ainda não consegui, pois > > criei o diretorio no sqplus como o comando assim: > > create directory arquivo_saida as '/ora01/oracle/tmp'; > > e coloquei no meu codigo o diretorio que criei.. > > arquivo_saida := utl_file.fopen > ('/ora01/oracle/tmp','teste.csv','W',32767); > > create directory arquivo_saida as '/ora01/oracle/tmp'; > > Por favor alguem pode me ajudar..Sistema operacional unix... > > > > Agradeço, > > Luiz > > > > > > > > > > --------------------------------- > > Yahoo! Search > > Dê uma espiadinha e saiba tudo sobre o Big Brother Brasil. > > > > [As partes desta mensagem que não continham texto foram removidas] > > > > > > > > > -------------------------------------------------------------------- ------------------------------------------------------ > Atenção! As mensagens deste grupo são de acesso público e de inteira responsabilidade de seus remetentes. > Acesse: http://www.mail-archive.com/oracle_br@yahoogrupos.com.br/ > -------------------------------------------------------------------- ------------------------------------------------------ __________________________________________________________________ > > Este Grupo recebe o apoio da SQL Magazine - www.devmedia.com.br/sqlmagazine > __________________________________________________________________ > O grupo Oracle_br não aceita anexos. Quando oferecer algum arquivo, tenha o link do mesmo para evitar trafego(pedidos) desnecessário. > Links do Yahoo! Grupos > > > > > > > > > > > > --------------------------------- > Yahoo! Messenger com voz - Instale agora e faça ligações de graça. > > [As partes desta mensagem que não continham texto foram removidas] > -------------------------------------------------------------------------------------------------------------------------- Atenção! As mensagens deste grupo são de acesso público e de inteira responsabilidade de seus remetentes. Acesse: http://www.mail-archive.com/oracle_br@yahoogrupos.com.br/ --------------------------------------------------------------------------------------------------------------------------__________________________________________________________________ Este Grupo recebe o apoio da SQL Magazine - www.devmedia.com.br/sqlmagazine __________________________________________________________________ O grupo Oracle_br não aceita anexos. Quando oferecer algum arquivo, tenha o link do mesmo para evitar trafego(pedidos) desnecessário. Links do Yahoo! Grupos <*> Para visitar o site do seu grupo na web, acesse: http://br.groups.yahoo.com/group/oracle_br/ <*> Para sair deste grupo, envie um e-mail para: [EMAIL PROTECTED] <*> O uso que você faz do Yahoo! Grupos está sujeito aos: http://br.yahoo.com/info/utos.html