Pular para o conteúdo
Visualizando 2 posts - 1 até 2 (de 2 do total)
  • Autor
    Posts
  • #106041
    Daniel Sampaio
    Participante

      Tenho 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ÇÃO

      QTD. 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ÇÃO

      QTD. UN. VI. UNIT(R$) ST VL ITEh(R$
      1 7896000554369 SUCO MAGUARV CAJU 500ML PET

      1 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 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
      . | . | .
      . | . | .
      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,39

      A 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.

      #106056
      mcrapino
      Participante

        Ola 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

      Visualizando 2 posts - 1 até 2 (de 2 do total)
      • Você deve fazer login para responder a este tópico.