UTL_FILE: ler arquivo com separador

Dúvidas, dicas e truques de PL/SQL. Aqui também vão assuntos relacionados a pacotes, triggers, funções, Java-Stored Procedures, etc
Responder
leolima_pinheiro
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 4
Registrado em: Qui, 03 Jul 2008 9:04 am
Localização: Barueri

:roll: Bom galera,
se alguém puder me ajudar, preciso fazer uma carga de dados usando a package UTL_FILE para tabelas do Siebel, porém o separador dos campos que virá no txt será ;, alguém poderia me ajudar a fazer isso !?!?

OBRIGADO ...
bertosro
Rank: Analista Júnior
Rank: Analista Júnior
Mensagens: 88
Registrado em: Sex, 18 Ago 2006 11:13 am
Localização: São Paulo - SP
Bertosro
MSN / TALK - roberto.fernandes@gmail.com

Olá Leonina Bom Dia!
Fique tranqüila pois isso é relativamente simples de se fazer, você já trabalhou alguma vez com pacote UTL_FILE?
Se não trabalhou primeiro entenda como fazer a leitura do arquivo e após isso basta somente tratar a informação e pronto.
Segue abaixo um exemplo de leitura.

Selecionar tudo



Create Or Replace Package PKG_LE_TXT AS
-----------------------
-- Leitura de um Txt --
-----------------------
Procedure PRC_LEITURA_TXT
    ( P_Nome_Local       In  Varchar2
    , P_Nome_Arq         In  Varchar2
    );
End PKG_LE_TXT ;
/
create Or Replace Package Body PKG_LE_TXT AS
Procedure PRC_LEITURA_TXT
    ( P_Nome_Local       In  Varchar2
    , P_Nome_Arq         In  Varchar2
    )
Is
  ---------------
  -- Variaveis --
  ---------------
  vLinha    Varchar2(2000);
  uArquivo  Utl_File.File_Type;
Begin
  --------------------------
  -- Define no do Arquivo --
  --------------------------
  Begin
    -----------------------
    --- Abre arquivo txt --
    -----------------------
    uArquivo := Utl_File.FOpen(P_Nome_Local , P_Nome_Arq  , 'r');
    ---------------------------------
    -- Loop para Ler o Arquivo Txt --
    ---------------------------------
    Loop
      Begin
        Utl_File.Get_Line(uArquivo , vLinha);
        Insert Into Tabela
             ( Coluna01 -- 01
             , Coluna02 -- 02
             )
        Values
             ( Substr( vLinha , 1,20 )
             , Substr( vLinha ,21,20 )
             );
      Exception
        -- reached the end of file
        When No_Data_Found      Then
          Exit;
        -- line to long to store in buffer
        When Value_Error        Then
          Raise_Application_Error(-20214, 'Value_Error '||sqlerrm);
        -- not a valid file handle
        When Utl_File.Invalid_FileHandle Then
          Raise_Application_Error(-20215, 'Invalid_filehandle '||sqlerrm);
        -- file is not open for reading
        When Utl_File.Invalid_Operation  Then
          Raise_Application_Error(-20216, 'invalid_operation '||sqlerrm);
        -- OS error occurred during read
        When Utl_File.Read_Error         Then
          Raise_Application_Error(-20217, 'Read_Error '||sqlerrm);
      End;
    End Loop;
    Utl_File.FClose(uArquivo);
    Commit;
  Exception
    -- file location or name was invalid
    When Utl_File.Invalid_Path      Then
      Raise_Application_Error(-20210, 'PROBLEMA NA ABERTURA ARQUIVO, '||'INVALID PATH');
    -- the open_mode string was invalid
    When Utl_File.Invalid_Mode      Then
      Raise_Application_Error(-20211, 'PROBLEMA NA ABERTURA ARQUIVO, '||'INVALID MODE');
    -- file could not be opened as requested
    When Utl_File.Invalid_Operation Then
      Raise_Application_Error(-20212, 'Invalid_Operation '|| SqlErrm);
    -- specified max_linesize is too large or too small
    When Utl_File.Invalid_Maxlinesize Then
      Raise_Application_Error(-20213, 'Invalid_Maxlinesize '|| SqlErrm);
  End;
  -------------------
  -- Fecha Arquivo --
  -------------------
  Utl_File.FClose(uArquivo);
  Commit;
End PRC_LEITURA_TXT;
End PKG_LE_TXT;
/



Avatar do usuário
vetis
Rank: Programador Pleno
Rank: Programador Pleno
Mensagens: 36
Registrado em: Sex, 25 Abr 2008 10:29 am
Localização: cariacica - es
Thiago Vetis
Creedence Clearwater Revival - :-o

Bom dia pessoa,

Eu tenho uma tabela com uma coluna de telefone que foi cadastrada das seguintes maneiras:

(21)51263256(47)41125858
(21)25568899(47)74587487

Preciso que retire os parênteses e os respectivos números que estão dentro dele para ficar da seguinte maneira:

5126325641125858
2556889974587487



Alguém sabe alguma maneira de retira os parênteses e tudo que está dentro dele ?


att,
leolima_pinheiro
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 4
Registrado em: Qui, 03 Jul 2008 9:04 am
Localização: Barueri

Certo BERTOSRO ... :?

Só pra esclarecer é LÉOLIMA_PINHEIRO

porém o código que você colocou logo acima tem a delimitação do arquivo através da posição no caso " Substr( vLinha , 1,20 ),
Substr( vLinha ,21,20 )!

Eu gostaria de saber se eu consigo ler o arquivo até o delimitador ';' e gerar essa informação no campo da tabela, essa hipotese já foi até levantada, mas com isso os campos da tabela poderiam ficar despadronizados, um campo teria 20, 30, ou até 40 posições sendo que as informações que serã armazenadas não serão tã grandes.

Mesmo assim agradeço a dica !!!!
Avatar do usuário
vetis
Rank: Programador Pleno
Rank: Programador Pleno
Mensagens: 36
Registrado em: Sex, 25 Abr 2008 10:29 am
Localização: cariacica - es
Thiago Vetis
Creedence Clearwater Revival - :-o

Desculpe-me postei no lugar erro!
que vacilo!
:oops:
gokden
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 264
Registrado em: Dom, 19 Ago 2007 8:18 pm
Localização: Ribeirão Preto - SP
Lucas de Souza

OCA Developer
Analista de sistemas

galera procurem aqui no forum sobre EXTERNAL TABLE
isso já me ajudou muito para importar arquivos... vou postar qui mais ou menos o que ela fáz e mais um exemplo...

External Tabel é uma tabela que lê dados diretamente de um arquivo texto ou não...
funciona perfeitamente com arquivos .csv delimitados por ";"

aqui vai um exemplo

Selecionar tudo

    CREATE TABLE orc_2008EXT (
      APL_ID     NUMBER(10),
      CD_CCUSTO  NUMBER(13),
      DT_LANC    NUMBER(8),
      VL         NUMBER(23,11)
    )
    ORGANIZATION EXTERNAL (
      TYPE ORACLE_LOADER
      DEFAULT DIRECTORY DADOS
      ACCESS PARAMETERS (
        RECORDS DELIMITED BY NEWLINE
        FIELDS TERMINATED BY ';'
        MISSING FIELD VALUES ARE NULL
        (
          APL_ID                           CHAR(10),
          CD_CCUSTO                        CHAR(13),
          DT_LANC                          CHAR(8),
          VL                               CHAR(50)
        )
      )
      LOCATION ('ARQUIVO1.csv','ARQUIVO2.csv')
    )
    PARALLEL 5
    REJECT LIMIT UNLIMITED;
pessoal usando o embromaxion dá pra configurar esta tabela...
a parte mais importante
RECORDS DELIMITED BY NEWLINE --- A cada linha no arquivo, será uma nova linha na tabela
FIELDS TERMINATED BY ';' ---- cada campo terminará com ";"(pode alterar)
MISSING FIELD VALUES ARE NULL ----- valores não encontrados serão nulos na tabela
Responder
  • Informação
  • Quem está online

    Usuários navegando neste fórum: Nenhum usuário registrado e 16 visitantes