- Este tópico contém 8 respostas, 4 vozes e foi atualizado pela última vez 16 anos, 8 meses atrás por
santosclay.
-
AutorPosts
-
7 de julho de 2009 às 5:33 pm #87756
oracle_sts
ParticipantePessoal,
Estou com este problema na geração do arquivo dentro de uma package, se transfiro este mesmo código e executo no SQL Plus ele funciona.
Existe alguma permissão a mais além de READ e WRITE para o “DIRETORY” para execução via PACKAGE ?
7 de julho de 2009 às 5:45 pm #87757David Siqueira
ParticipanteQual a versão do seu banco parceiro?
Abração
7 de julho de 2009 às 6:13 pm #87761Marcio68Almeida
ParticipanteA área onde o arquivo será gerado tem que ter permissão de gravação para o usuário que inicializa o banco de dados.
7 de julho de 2009 às 6:33 pm #87766oracle_sts
ParticipanteA versão do Banco é a 9i. O problema não é permissão de sistema, pois se faço o mesmo processo no SQLPLUS funciona, na Package não. O usuário que conecto tanto para execução da package como para execução do SQLPLUS é o mesmo.
7 de julho de 2009 às 6:42 pm #87769santosclay
ParticipanteBom dia a todos.
Cara veja se esse link te ajuda:
http://oraclequirks.blogspot.com/search/label/ORA-29289
Um grande abraço e ficamos no aguardo de um retorno sobre a solução ou não do problema.
Clayton.
7 de julho de 2009 às 7:01 pm #87772oracle_sts
ParticipanteInfelizmente Clayton não me resolveu.
Segue abaixo o caso:
01. Criei o “DIRETORY”
CREATE DIRECTORY DIRETORIO AS ‘C:Diretorio’;
02. Defini os privilégios para o usuário
GRANT READ, WRITE ON DIRECTORY DIRETORIO TO USUARIO;
03. Executei no SQLPLUS conectado com o usuário “USUARIO” e funcionou
DECLARE
V_LINHA VARCHAR2(2000) := ”;
V_ARQUIVO UTL_FILE.FILE_TYPE;
BEGIN
V_ARQUIVO :=
UTL_FILE.FOPEN(‘DIRETORIO’, ‘ARQUIVO.TXT’, ‘W’);
FOR i in 1..5 LOOP
V_LINHA := ‘LINHA ‘ || i || ‘!!’;
UTL_FILE.PUT_LINE(V_ARQUIVO, V_LINHA);
END LOOP;
UTL_FILE.FCLOSE(V_ARQUIVO);
END;- Executei na PACKAGE conectado com o usuário “USUARIO” e NÃO funcionou, deu o erro que comentei.
PACKAGE BODY GERA_TEXTO IS
procedure gera_texto_2 is
V_LINHA VARCHAR2(2000) := ”;
V_ARQUIVO UTL_FILE.FILE_TYPE;
begin
V_ARQUIVO := UTL_FILE.FOPEN(‘DIRETORIO’, ‘ARQUIVO2.TXT’, ‘W’);
FOR i in 1..5 LOOP
V_LINHA := ‘LINHA ‘ || i || ‘!!’;
UTL_FILE.PUT_LINE(V_ARQUIVO, V_LINHA);
END LOOP;
UTL_FILE.FCLOSE(V_ARQUIVO);
when others then
utl_file.fclose(V_ARQUIVO);
dbms_output.put_line(‘gera_texto_2-‘ || sqlerrm);
end;
END;
**ERRO: gera_texto_2-ORA-29289: directory access denied7 de julho de 2009 às 8:54 pm #87778David Siqueira
ParticipanteVocê ja tentou fazer via parametro de Banco UTL_FILE_DIR ao invés de usar o DIRECTORY?
Tive esse problema no 8i , mas é porque a release não permitia usar Directory da maneira que eu queria, mais a partir do 9i muitas coisas foram implementadas nesse sentido, faça um teste usando o UTL_FILE simples mesmo sem DIRECTORY na chamada.
Abaço
7 de julho de 2009 às 9:40 pm #87779oracle_sts
ParticipantePessoal,
Consegui resolver, o problema era que a procedure estava em outro esquema, apesar de estar conectado como USUARIO o esquema era USUARIO2, tive que dar permissão para o usuario USUARIO2.
Agora estou com outro problema, todos esses problemas são porque tenho que gerar um arquivo texto das notas fiscais da empresa, onde cada arquivo de nota deverá conter uma linha incluindo os itens e a delimitação deverá ser ‘;’. Quando passa de 32700 ele começa a dar o erro Erro na gravação do arquivo-ORA-29285: file write error
7 de julho de 2009 às 11:19 pm #87782santosclay
ParticipanteOlá.
Cara tenta adicionar o parametro max_linesize como descrito abaixo:
:= utl_file.fopen(
location => path,
filename => filename,
open_mode => read_write_append,
max_linesize => 32767);
Um grande abraço e ficamos no aguardo de um retorno sobre a solução ou não do problema.
Clayton.
-
AutorPosts
- Você deve fazer login para responder a este tópico.