Pular para o conteúdo
  • Este tópico contém 8 respostas, 4 vozes e foi atualizado pela última vez 16 anos, 8 meses atrás por santosclay.
Visualizando 9 posts - 1 até 9 (de 9 do total)
  • Autor
    Posts
  • #87756
    oracle_sts
    Participante

      Pessoal,

      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 ?

      #87757
      David Siqueira
      Participante

        Qual a versão do seu banco parceiro?

        Abração

        #87761
        Marcio68Almeida
        Participante

          A área onde o arquivo será gerado tem que ter permissão de gravação para o usuário que inicializa o banco de dados.

          #87766
          oracle_sts
          Participante

            A 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.

            #87769
            santosclay
            Participante

              Bom 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.

              #87772
              oracle_sts
              Participante

                Infelizmente 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;

                1. 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 denied

                #87778
                David Siqueira
                Participante

                  Você 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

                  #87779
                  oracle_sts
                  Participante

                    Pessoal,

                    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

                    #87782
                    santosclay
                    Participante

                      Olá.

                      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.

                    Visualizando 9 posts - 1 até 9 (de 9 do total)
                    • Você deve fazer login para responder a este tópico.