- Este tópico contém 1 resposta, 2 vozes e foi atualizado pela última vez 12 anos, 4 meses atrás por
mcrapino.
-
AutorPosts
-
18 de outubro de 2013 às 5:48 pm #106041
Daniel Sampaio
ParticipanteTenho uma tabela com apenas uma coluna varchar2 (2000 bytes) cujos dados de cada registro dessa tabela são textos da forma:
Registro1
26/09/2013 20:18:38 CCF:117500 000:21106
CUPOM FISCAL
ITEH CdDIGO DESCRIÇÃOQTD. UN. VI. UNIT(R$) ST VL ITEh(R$
1 7896117600072 FAROFA PRONTA DEUSA CEB/ALHO 500G
1 x 3,09 II 3,09
2 0000000039215 QUEIJO TIROL PROVOLONE CRV KG
1,028 x 23,62 OIT 24,28
3 7896003703085 BISC.HARILAN MANTEIGA 400G 1 OIT 2,69
4 7891000252604 FARINHA LACTEA NESTLE 400G 1 OIT 9,99
.
.
.Registro2
15/10/2013 20:00:38 CCF:117500 000:21106
CUPOM FISCAL
ITEH CdDIGO DESCRIÇÃOQTD. UN. VI. UNIT(R$) ST VL ITEh(R$
1 7896000554369 SUCO MAGUARV CAJU 500ML PET1 x 3,19 OIT 3,19
2 7891000049273 AL.INF.NESTLE CNE/LEG.115G 1 OIT 3 39
3 7891000049099 AL.INF.NESTLE CNE/LEG/MAC.1156
1 x 3 39 OIT 3 39
.
.
.Eu preciso extrair de registro todas as substrings contendo o código do produto, descrição e preço, distintos,
para outra tabela:Registro1 p/ tabela PRODUTO
codigo| descricao | preco_unitario
7896117600072| FAROFA PRONTA DEUSA CEB/ALHO 500G | 3,09
0000000039215| QUEIJO TIROL PROVOLONE CRV KG | 24,28
7896003703085| BISC.HARILAN MANTEIGA 400G | 2,69
.
.
Registro 2 p/ tabela PRODUTOcodigo| descricao | preco_unitario
7896117600072| FAROFA PRONTA DEUSA CEB/ALHO 500G | 3,09
0000000039215| QUEIJO TIROL PROVOLONE CRV KG | 24,28
7896003703085| BISC.HARILAN MANTEIGA 400G | 2,69
. | . | .
. | . | .
7896000554369| SUCO MAGUARV CAJU 500ML PET | 3,19
7891000049273| AL.INF.NESTLE CNE/LEG.115G | 3,39
7891000049099| AL.INF.NESTLE CNE/LEG/MAC.115G | 3,39A solução proposta pode ser em SQL, PL/SQL, etc.
Eu consegui chegar até a seguinte Expressão Regular que faz uma parte do trabalho:
INSERT INTO produtos (codigo, descricao, preco_unitario)
SELECT REGEXP_SUBSTR(texto,'[0-9]{13}’),
REGEXP_SUBSTR(texto,’ (([[:alnum:]]+(.?| ))+[0-9]+G)’), null
FROM cupons;O problema é que ela funciona somente até encontrar a primeira ocorrência do padrão. É preciso que
ela percorra o registro inteiro e extraia cada ocorrência para novas linhas da tabela PRODUTO;
Podem desconsiderar a conversão de tipos.
Em anexo estão os Sql para quem quiser fazer os testes.
É isso. Agradeço imensamente qualquer contribuição.21 de outubro de 2013 às 3:54 pm #106056mcrapino
ParticipanteOla Daniel, as linhas dentro do campo possui o salto de linha.
Se tiver, tente usar esta função do meu blog que criei e usei o seu problema para exemplificar. tente colocar como delimitador o chr(10).http://maurodesenvolvedor.blogspot.com.br/2013/10/plsql-funcao-para-quebrar-uma-string-de.html
Espero que funcione
-
AutorPosts
- Você deve fazer login para responder a este tópico.