Pular para o conteúdo
Visualizando 4 posts - 1 até 4 (de 4 do total)
  • Autor
    Posts
  • #105693
    leo_jf
    Participante

      Boa Tarde prezados,

      Tenho um usuario teste, com permissão de criar diretorio. Tentei realizar o seguinte teste:
      create or replace directory TEMP_DIR
      as ‘c:temp’;

      e depois executei o comando:

      declare
      v_arquivo utl_file.file_type;
      begin
      v_arquivo := utl_file.fopen(‘c:temp’, ‘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 utl_file.invalid_path then
      raise_application_error(-20000, ‘Atenção! O diretório informado não existe.’);
      end;

      entretanto é levantado o erro:
      ORA-29283: operação de arquivo inválida
      ORA-06512: em “SYS.UTL_FILE”, line 536
      ORA-29283: operação de arquivo inválida
      ORA-06512: em line 4

      Alguém sabe me dizer o que esta acontecendo?

      obs:Quando é executado o comando SELECT * FROM V$PARAMETER
      WHERE name like ‘utl%’, o value está com ‘*’;

      #105694
      rman
      Participante

        @leo_jf

        Você fez quase certo. Foi criado o objeto diretório mas você não utilizou.


        v_arquivo := utl_file.fopen('TEMP_DIR', 'arq_teste.txt', 'W');

        O primeiro parametro de utl_file.fopen é um varchar2 com o nome do objeto diretório e não um varchar2 com o path.

        #105696
        leo_jf
        Participante

          ola,
          infelizmente troquei, mas ainda levanta erro:
          declare
          v_arquivo utl_file.file_type;
          begin
          v_arquivo := utl_file.fopen(‘TEMP_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
          raise_application_error(-20000, ‘Atenção! O diretório informado não existe.’);
          end;

          A criação do diretório local precisa ser feita pelo sys do oracle?
          Tenho que atribuir alguma permissão na pasta do windows?

          #105698
          rman
          Participante

            @leo_jf

            É necessário dar permissão de leitura e escrita para o usuário.


            GRANT READ,WRITE ON DIRECTORY 'TEMP_DIR' TO USUARIO;

            O diretório no sistema operacional deve ser feito pelo usuário que esteja no grupo ora_dba.

            Outro detalhe importante, o DIRECTORY é canse sensitive, tente C:teste, com o C maisculo.

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