Pular para o conteúdo
Viewing 4 posts - 1 through 4 (of 4 total)
  • Author
    Posts
  • #107472
    Avatar de Marco BorgesMarco Borges
    Participant

      Senhores.

      Lá pelas tantas na minha procedure, eu preciso atualizar a tabela com valores de linha recebida num arquivo.
      Arquivo:
      escob,CPRODLIM,num_contrato,ORIGEM,CONTADOR,DATA
      EMPRESA,98040,1263059720000,RADAR,1,09/03/2015

      Ai exemplo, ele encontra essa linha, insere ok, porque e a primeira vez que ele acha ela no arquivo.

      Se por ventura, em outro arquivo ele encontrar a mesma, porém com algum dado diferente.
      Ex.
      escob,CPRODLIM,num_contrato,ORIGEM,CONTADOR,DATA
      EMPRESA,98040,1263059720000,RADAR,9,09/03/2015

      Eu nao estou conseguindo aplicar no codigo, o que por pensamento e simples.
      Regra.
      1 – Atualizar com dados novos, caso não tenha
      2 – Atualziar com algum dado novo , caso seja necessario atualizar,
      3 – Não atualizar caso seja dados iguais.

      1.
      update divida
      set div_bem = v_origem || ‘|’ || v_contador || ‘|’ || v_data || ‘|’ || rtrim(div_bem)
      where div_nrocontrato = p_contrato
      and div_pro_cod = C_PRODUTO
      and div_bem not LIKE ‘%RADAR%’
      and div_bem not like ‘%SITE%’
      and DIV_VALIDO = 1;

      2. Queria um update, pode ser com if, que sometne atualize a linha:
      Ex de linha ja concatenada com a informação nova.
      RADAR|1|09/03/2015|C3 | boletar_a_partir_de 24/11/2014 | Vl com desc. À vista : 985.25

      porque pode acontecer que algum dado do concatenado venha com informação diferente.

      3. seria um else do 1 e do 2.

      #107473
      Avatar de rmanrman
      Participant

        @Marco Borges

        Pesquise sobre o comando MERGE, creio que é disso que você precisa.

        #107474
        Avatar de Marco BorgesMarco Borges
        Participant

          Sabe meu caro, dei uma lida e constatei, que nao.

          ao meu entendimento, talvez sem tanta experiencia, constato:
          Quando recebo a linha:
          escob,CPRODLIM,num_contrato,ORIGEM,CONTADOR,DATA
          EMPRESA,98040,1263059720000,SITE,9,09/03/2015

          e na proc ele vê essa condição:

          update divida
          set div_bem = v_origem || ‘|’ || v_contador || ‘|’ || v_data || ‘|’ || rtrim(v_a_divbem)
          where div_nrocontrato = p_contrato
          and div_pro_cod = C_PRODUTO
          and div_bem not LIKE ‘%RADAR%’
          and div_bem not like ‘%SITE%’
          and DIV_VALIDO = 1;

          Ele me contempla duas situações:
          1º insere para registros novos
          2º não repete a inclusão para registros novos.

          RADAR|1|09/03/2015|C3 | boletar_a_partir_de 24/11/2014 | Vl com desc. À vista : 985.25

          Para tanto o x da questão e quando vem uma segunda linha com algum dado diferente
          e que nesse campo div_bem, que é um varchar2, recebe até 255 de informação.

          Eu poderia muito bem, tirar o not like e ele incrementaria a linha,
          porém uma hora ele vai estourar os 255 entende….

          Ai é ai que to quebrando o melão.;

          #107500
          Avatar de Marco BorgesMarco Borges
          Participant

            RESOLVIDO

            v_posIni :=
                       case 
                         when (nvl(length(trim(REGEXP_SUBSTR(v_divbem,'[^|]*,',1,4))),0) <= 2) then
                             case 
                                when (nvl(length(trim(REGEXP_SUBSTR(v_divbem,'[^|]*,',1,4))),0) = 0) then 
                                  INSTR(v_divbem,'|',1,3)
                                else
                                  INSTR(v_divbem,trim(REGEXP_SUBSTR(v_divbem,'[^|]*,',1,4)),1,1) end 
                         when length(trim(REGEXP_SUBSTR(v_divbem,'[^|]*,',1,3))) <= 2 then
                             case 
                                when (nvl(length(trim(REGEXP_SUBSTR(v_divbem,'[^|]*,',1,3))),0) = 0) then 
                                  INSTR(v_divbem,'|',1,2)
                                else
                                  INSTR(v_divbem,trim(REGEXP_SUBSTR(v_divbem,'[^|]*,',1,3)),1,1) end 
            
                         when length(trim(REGEXP_SUBSTR(v_divbem,'[^|]*,',1,2))) <= 2 then
                              case 
                                when (nvl(length(trim(REGEXP_SUBSTR(v_divbem,'[^|]*,',1,2))),0) = 0) then 
                                  INSTR(v_divbem,'|',1,1)
                                else
                                  INSTR(v_divbem,trim(REGEXP_SUBSTR(v_divbem,'[^|]*,',1,2)),1,1) end 
                         when length(trim(REGEXP_SUBSTR(v_divbem,'[^|]*,'))) <= 2 then
                              case 
                                when (nvl(length(trim(REGEXP_SUBSTR(v_divbem,'[^|]*,'))),0) = 0) then 
                                  INSTR(v_divbem,'|',1,1)
                                else
                                  INSTR(v_divbem,trim(REGEXP_SUBSTR(v_divbem,'[^|]*,')),1,1) end 
                         else 
                              0 
                       end;
            
          Viewing 4 posts - 1 through 4 (of 4 total)
          • You must be logged in to reply to this topic.
          plugins premium WordPress