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