Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Paulo Faria

[PL/SQL] Como acessar arquivos com PL?

Recommended Posts

Caros amigos,como posso ler arquivos textos pelo PL/SQL e carregá-los para uma tabela?ex:Tabela: TB_DESCFormato da tabela: CO_DESC varchar2(3) DS_DESC varchar2(3)Arquivo: c:\teste.txtDados: 001|abc002|def003|ghiSe puderem ajudar ficarei grato!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Utilize a packge Sys.Utl_file

 

exemplo :

 

DECLARE
  aArquivo	SYS.UTL_FILE.FILE_TYPE;
  sLinhaArq   varchar2(4000);

BEGIN
  aArquivo := Sys.Utl_file.Fopen(sCaminho,'...NOME ARQUIVO...','r');
  While Not (bFim) Loop
	Begin
	  SYS.UTL_FILE.Get_Line(aArquivo,sLinhaArq);
	  -- processo ....
   Exception
	  When no_data_found then
		bFim := True;
	  When Others then
		Raise;
	End;
  End loop;
  SYS.UTL_FILE.FCLOSE(aArquivo);
END;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Motta,

 

fiz algo parecido com isso, o que estava me retornando um erro.

 

declare v_arquivo utl_file.file_type; v_linha varchar2(1000);begin v_arquivo := utl_file.fopen('/home/oracle', 'teste.txt', 'r'); loop begin  utl_file.get_line(v_arquivo, v_linha);  dbms_output.put_line(v_linha);  exception  when no_data_found then   utl_file.fclose(v_arquivo);   exit;  end; end loop;end;

Retornava o seguinte erro:

ERRO na linha 1:ORA-29280: invalid directory pathORA-06512: at "SYS.UTL_FILE", line 33ORA-06512: at "SYS.UTL_FILE", line 436ORA-06512: at line 5

O problema estava no caminho para o arquivo. Consegui resolver o problema criando um objeto DIRECTORY e posteriormente passando este objeto.

 

create or replace directory DOC_PATH as '/home/oracle'declare v_arquivo utl_file.file_type; v_linha varchar2(1000);begin v_arquivo := utl_file.fopen('DOC_PATH', 'teste.txt', 'r'); loop begin  utl_file.get_line(v_arquivo, v_linha);  dbms_output.put_line(v_linha);  exception  when no_data_found then   utl_file.fclose(v_arquivo);   exit;  end; end loop;end;

Compartilhar este post


Link para o post
Compartilhar em outros sites

Paulo,

 

Sera que nesta linha

v_arquivo := utl_file.fopen('/home/oracle', 'teste.txt', 'r');

 

nao precise modificar para

v_arquivo := utl_file.fopen('/home/oracle/', 'teste.txt', 'r');

 

http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

O caminho do utl também deve ser definido, isto não conheço pois aqui que criou foi o dba.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara,

 

Faz o seguinte entao...

 

você tem que habilitar o parametro para o pacote UTL_FILE funcionar, roda o comando abaixo e reinicia o seu banco de dados:

 

alter system set utl_file_dir='c:\','d:\','*' scope=spfile

 

 

Neste comando você esta dando permissao do pacote usar qualquer pasta do sistema, podendo alterar por pastas especificas tb como no exemplo abaixo:

 

alter system set utl_file_dir='c:\' scope=spfile

 

http://forum.imasters.com.br/public/style_emoticons/default/joia.gif

Compartilhar este post


Link para o post
Compartilhar em outros sites

Isso mesmo Montilla, Antes de utilizar o UTL_FILE, veja o parametro UTL_FILE_DIR da sua instâcia o local que ele aponta e veja se tem todas as permissões. Caso esteja com *, você poderá gerar os arquivos em qualquer lugar, desde que tenha permissão. Abraços, :lol:

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.