- Este tópico contém 4 respostas, 4 vozes e foi atualizado pela última vez 11 anos, 4 meses atrás por FernandaAc.
-
AutorPosts
-
8 de julho de 2013 às 4:02 pm #105651Luciano Alves de OliveiraParticipante
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 5O 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/adpAo 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 NOGrato por qualquer ajuda.
Luciano
8 de julho de 2013 às 4:10 pm #105652rmanParticipante@luciano.aol
Se for uma carga pontual sugiro a utilização do Sql Loader para essa tarefa.
8 de julho de 2013 às 4:22 pm #105653Luciano Alves de OliveiraParticipanteRman,
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
16 de julho de 2013 às 5:10 pm #105660Sergio Mancini JuniorParticipanteLuciano,
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,
26 de julho de 2013 às 3:25 pm #105702FernandaAcParticipanteLuciano, 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 -
AutorPosts
- Você deve fazer login para responder a este tópico.