Oi Emerson, fiz uma função para fazer o que você deseja

 

 

Passo os parâmetros (lista de valores (string) , qual a posição do token que 
quero ler, e por ultimo qual o delimitador que irei usa)

 

Exemplo

 

Pegar o cpf de cada registro

 

Cpf := fc_get_token(t_1 ,4,` | `);

 

 

create or replace function fc_get_token(

   listaValores_in  varchar2,

   posicao_in       number,

   delimitador_in   varchar2 := ','

) return    varchar2

is

   inicioPosicao number;

   fimPosicao    number;

begin

   if posicao_in = 1 then

       inicioPosicao := 1;

   else

       inicioPosicao := instr(listaValores_in, delimitador_in, 1, posicao_in - 
1);

       if inicioPosicao = 0 then

           return null;

       else

           inicioPosicao := inicioPosicao + length(delimitador_in);

       end if;

   end if;

 

   fimPosicao := instr(listaValores_in, delimitador_in, inicioPosicao, 1);

 

   if fimPosicao = 0 then

       return substr(listaValores_in, inicioPosicao);

   else

       return substr(listaValores_in, inicioPosicao, fimPosicao - 
inicioPosicao);

   end if;

exception

   when others then

        raise_application_error(-20001,'Erro Busca Token ' || sqlerrm);

 

end fc_get_token;

 

 

De: oracle_br@yahoogrupos.com.br [mailto:oracle_br@yahoogrupos.com.br] 
Enviada em: quinta-feira, 7 de abril de 2016 16:01
Para: oracle_br@yahoogrupos.com.br
Assunto: Re: [oracle_br] Ajuda - SQL

 

  

Boa Tarde Diego,

 

 Tenho uma função que faz a busca de parte de uma string que pode te ajudar. 

 

segue abaixo, o link:

http://blog.gaudencio.net.br/2015/11/oracle-funcao-para-retornar-partes-de.html

 

 

Em 7 de abril de 2016 14:57, Diego Melo diegopm...@gmail.com 
<mailto:diegopm...@gmail.com>  [oracle_br] <oracle_br@yahoogrupos.com.br 
<mailto:oracle_br@yahoogrupos.com.br> > escreveu:

  

Olá galera, tudo bem ?

 

Por gentileza, poderiam me ajudar em um SQL. 

 

Minha versão do Oracle é:

 

Oracle Database 10g Enterprise Edition Release 10.2.0.5.0 - 64bi

PL/SQL Release 10.2.0.5.0 - Production

"CORE 10.2.0.5.0 Production"

TNS for Linux: Version 10.2.0.5.0 - Production

 

Tenho uma tabela com uma string e diversos campos separados por | (pipe)

 

Preciso trazer cada campo em uma coluna. Eu até consegui uma maneira, o 
problema é que quando um registro não tem o campo preenchido e a string traz 
||, ai da ruim na minha solução. Detalhe, eu não posso atlerar a string 
original  

 

Alguém teria uma solução em Oracle SQL ??

 

Fiz do seguinte modo:

 

 

CREATE TABLE t_1 ( strings varchar2(4000));
/
INSERT INTO t_1
VALUES ('99|1500001|JOANA PRADO |08227525490 <tel:08227525490> |BRA|0||');
 
INSERT INTO t_1
VALUES ('99|1500002|LUCIANA XIMENES SILVA||BRA|0||');
 
INSERT INTO t_1
VALUES ('99|1500003|JULIA ROBERTS|44303539805|USA|0||');
 
COMMIT;
 
SELECT regexp_substr(strings,'[^|]+',1,1) identificador,
       regexp_substr(strings,'[^|]+',1,2) id,
       regexp_substr(strings,'[^|]+',1,3) nome,
       regexp_substr(strings,'[^|]+',1,4) cpf,
       regexp_substr(strings,'[^|]+',1,5) pais,
       regexp_substr(strings,'[^|]+',1,6) tipo
FROM t_1

 

 

Reparem que o registro id 1500002 não tem cpf e ai o campo de pais acaba 
ocupando o espaço do CPF. 

 

Grato. 

 

Diego

 

 

 

 



  • [oracle... Diego Melo diegopm...@gmail.com [oracle_br]
    • Re... angelo angelolis...@gmail.com [oracle_br]
      • ... Diego Melo diegopm...@gmail.com [oracle_br]
        • ... Gustavo Guedes guedescomputa...@gmail.com [oracle_br]
          • ... Gustavo Guedes guedescomputa...@gmail.com [oracle_br]
    • Re... Emerson dos Santos Gaudêncio emerson.fen...@gmail.com [oracle_br]
      • ... Fernando - Unisul ferna...@unisul.br [oracle_br]
    • [o... alvaro.rbsfi...@yahoo.com.br [oracle_br]

Responder a