Pular para o conteúdo
  • Este tópico contém 4 respostas, 4 vozes e foi atualizado pela última vez 11 anos, 4 meses atrás por Avatar de FernandaAcFernandaAc.
Visualizando 5 posts - 1 até 5 (de 5 do total)
  • Autor
    Posts
  • #105651
    Avatar de Luciano Alves de OliveiraLuciano Alves de Oliveira
    Participante

      Olá bom dia.

      Estou tentando utilizar o recurso de utl file para ler um arquivo txt e importar os dados para uma tabela no Oracle. Já li em vários fóruns e já pesquisei muito em documentação oracle e site na internet mas não consigo encontrar a resposta para o problema.

      O fonte segue abaixo:

      set serveroutput on
      DECLARE
      arquivo_ler UTL_File.File_Type;
      Linha Varchar2(1000);
      BEGIN
      arquivo_ler := UTL_FILE.FOPEN(‘INTRANET_LOAD’,’carga_intranet.txt’, ‘R’,32767);
      Loop
      UTL_File.Get_Line(arquivo_ler, Linha);
      dbms_output.put_line(Linha);
      End Loop;
      UTL_File.Fclose(arquivo_ler);
      Dbms_Output.Put_Line(‘Arquivo processado com sucesso.ULAULA’);
      END;
      /

      Os erros:
      ORA-29283: operação de arquivo inválida
      ORA-06512: em “SYS.UTL_FILE”, line 633
      ORA-29283: operação de arquivo inválida
      ORA-06512: em line 5

      O que já foi feito:
      Criado o DIRECTORY(INTRANET_LOAD) e dado os GRANT de read, write para o usuário
      No Linux, onde o Oracle está instalado, foi dado acesso total ao usuário Oracle na pasta: /u01/app/oracle/product/11.2.0/db_1/adp

      Ao escrever a consulta;

      SELECT *
      FROM all_tab_privs
      WHERE table_name = ‘INTRANET_LOAD’;

      Os dados retornados são.

      1 SIGA INTRANET SYS INTRANET_LOAD READ NO NO
      2 SIGA INTRANET SYS INTRANET_LOAD WRITE NO NO

      Grato por qualquer ajuda.

      Luciano

      #105652
      Avatar de rmanrman
      Participante

        @luciano.aol

        Se for uma carga pontual sugiro a utilização do Sql Loader para essa tarefa.

        #105653
        Avatar de Luciano Alves de OliveiraLuciano Alves de Oliveira
        Participante

          Rman,

          Grato pela atenção, mas já avaliei com calma as tecnologias, e também já passei pelo problemas mais óbvios.
          Se fosse utilizar o SQL Loader, já estaria pronto, exceto pelo fato que será uma carga diária, a partir de um arquivo texto, que terei que utilizar de recursos que o SQL Loader não oferece, tal como mesclar campos do txt em uma só coluna, terei que utilizar várias vezes o SUBSTR, enfim, o SQL Loader é ótimo, mas não para esse tarefa.

          At.

          Luciano

          #105660
          Avatar de Sergio Mancini JuniorSergio Mancini Junior
          Participante

            Luciano,

            Já considerou utilizar uma external table para “montar” seu arquivo?

            A partir daí, poderia fazer a carga de dados através de um INSERT AS SELECT, aplicando qualquer regra de negócio necessária.

            Att,

            #105702
            Avatar de FernandaAcFernandaAc
            Participante

              Luciano, provavelmente pela data vc já resolveu, mas para documentar aqui uma outra sugestão, segue auxílio para vc ou outros com o mesmo problema 🙂

              Confirma se o seu directory parametrizado como ‘INTRANET_LOAD’ está correto: /u01/app/oracle/product/11.2.0/db_1/adp
              e o arquivo carga_intranet.txt está lá mesmo, com a devida permissão de leitura. Sugestão, dê acesso total para um primeiro teste (chmod 777 carga_intranet.txt)

              Neste caso, não basta a permissão na pasta.

              Este erro é um pouco genérico, pois o sistema dá a mesma mensagem tanto para a falta de permissão quanto para o caminho ou nome do arquivo inválido. Também é case sensitive (diferencia letras maiúsculas / minúsculas)

              Espero que seja um destes parâmetros. Boa sorte!

              Abs
              Fernanda

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