Separar string em linhas

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
vicdias
Rank: Estagiário Júnior
Rank: Estagiário Júnior
Mensagens: 2
Registrado em: Qua, 01 Set 2010 10:31 pm
Localização: Vitória-ES

Boa tarde !

Não consegui encontrar isso no fórum, mas se já existe e deixei passar, me desculpem.

Seguinte, tenho uma tabela onde tem um campo co números separados com "/", exemplo:

Selecionar tudo

Material | Numero | Ítens 
-------------------------------
Carro    | 1256   | 1/2/3/4/5/6/7/8/9/10
Pia      | 989    | 40/41/80/96
Gostaria de quebrar essa string "Itens" em linhas para ficar assim:

Selecionar tudo

Material  | Numero   | Ítens 
-------------------------------
Carro     | 1256     | 1
Carro     | 1256     | 2
Carro     | 1256     | 3
Carro     | 1256     | 4
Carro     | 1256     | 5
Carro     | 1256     | 6
Carro     | 1256     | 7
Carro     | 1256     | 8
Carro     | 1256     | 9
Carro     | 1256     | 10
Pia       | 989      | 40
Pia       | 989      | 41
Pia       | 989      | 80
Pia       | 989      | 96
Podem me ajudar ??
spernega
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 232
Registrado em: Ter, 19 Jun 2007 2:12 pm
Localização: São Paulo - SP

bom dia vicdias,

Não é exatamente o que você precisa, mas é um começo.

Selecionar tudo

SELECT regexp_substr('Carro | 1256 | 1/2/3/4/5/6/7/8/9/10','[^|]+',1,level) FROM dual
CONNECT BY  regexp_substr('Carro | 1256 | 1/2/3/4/5/6/7/8/9/10','[^|]+',1,level) IS NOT NULL;

Selecionar tudo

REGEXP_SUBSTR('CARRO|1256|1/2/3/4/5
-----------------------------------
Carro
 1256
 1/2/3/4/5/6/7/8/9/10
Se o padrão das linhas for sempre o mesmo, talvez seja melhor criar uma função que retorna um ref cursor.
vicdias
Rank: Estagiário Júnior
Rank: Estagiário Júnior
Mensagens: 2
Registrado em: Qua, 01 Set 2010 10:31 pm
Localização: Vitória-ES

Bom dia spernega,

Já tentei utilizar o regexp_substr como me falou, o problema é que são mais de 10mil registros e com o regexp_substr demora uma eternidade.
Fiz um teste só com 10 registros e ele demorou demasiados 25min.

O campo que preciso quebrar é somente os de ítens (aquele com os valores 1/2/3/4/5/6/....)
spernega
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 232
Registrado em: Ter, 19 Jun 2007 2:12 pm
Localização: São Paulo - SP

entendo, a melhor solução seria uma função retornado um ref cursor mesmo.

não consegui pensar em uma solução apenas com select.
spernega
Rank: DBA Pleno
Rank: DBA Pleno
Mensagens: 232
Registrado em: Ter, 19 Jun 2007 2:12 pm
Localização: São Paulo - SP

vicdias,

veja se esse script resolve.

Fiz um teste com 20 registros usando parcialmente o regexp_substr e ref cursor, foi bem rápido
Anexos
fn_glufke.txt
(3.06 KiB) Baixado 703 vezes
Responder
  • Informação
  • Quem está online

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