- This topic has 3 replies, 2 voices, and was last updated 9 years, 6 months ago by Marco Borges.
-
AuthorPosts
-
4 de maio de 2015 at 5:42 pm #107472Marco BorgesParticipant
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/2015Ai 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/2015Eu 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.25porque pode acontecer que algum dado do concatenado venha com informação diferente.
3. seria um else do 1 e do 2.
4 de maio de 2015 at 7:44 pm #107473rmanParticipant@Marco Borges
Pesquise sobre o comando MERGE, creio que é disso que você precisa.
4 de maio de 2015 at 9:41 pm #107474Marco BorgesParticipantSabe 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/2015e 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.;
12 de maio de 2015 at 11:06 pm #107500Marco BorgesParticipantRESOLVIDO
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;
-
AuthorPosts
- You must be logged in to reply to this topic.