Ir para conteúdo

Publicidade

 Estatísticas do Fórum

  • 0 Usuários ativos

    0 membros, 0 visitantes, 0 membros anônimos

Foto
- - - - -

[PL/SQL] Como acessar arquivos com PL?

  • Por favor, faça o login para responder
6 respostas neste tópico

#1 Paulo Faria

Paulo Faria
  • Members
  • 2 posts

Postado 18 julho 2006 - 11:49

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!
  • 0

Publicidade

#2 Motta

Motta

    Motta

  • Moderadores
  • 9.466 posts

Postado 18 julho 2006 - 14:28

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;

  • 0

#3 Paulo Faria

Paulo Faria
  • Members
  • 2 posts

Postado 19 julho 2006 - 08:38

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;

  • 0

#4 MonTiLLa

MonTiLLa
  • Members
  • 236 posts

Postado 19 julho 2006 - 10:22

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.imaster...tyle_emoticons/default/thumbsup.gif
  • 0

#5 Motta

Motta

    Motta

  • Moderadores
  • 9.466 posts

Postado 19 julho 2006 - 12:45

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

#6 MonTiLLa

MonTiLLa
  • Members
  • 236 posts

Postado 19 julho 2006 - 13:53

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.imaster...tyle_emoticons/default/joia.gif
  • 0

#7 alphamek

alphamek

    www.rodrigoalmeida.net

  • Members
  • 1.925 posts

Postado 24 julho 2006 - 00:47

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:
  • 0




Publicidade

/ins>