UPDATE em mais de uma variavel na procedure.

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
borges_rsbr
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 5
Registrado em: Qua, 12 Nov 2014 10:52 am

O que tenho:

Selecionar tudo

v_1= RADAR,2,02/02/2015
v_2= *|61604 | ITAUCARD | C5 | boletar_a_partir_de 24/04/2015 |Vl com desc. A vista:3016.27',19,255

-- eu fiz justamente esta separação para ver o que cada um pega, e entender o processo.
o que cada um está recebendo

Selecionar tudo

select v_AjusteBem
into v_1
from dual;

select substr(v_divbem,v_posIni,255)
into v_2
from dual;

update divida
set div_bem = v_1 || v_2
where div_nrocontrato = p_contrato
and div_pro_cod = C_PRODUTO
and DIV_VALIDO = 1
and div_dataalteracao=sysdate;
Qual o meu problema?

Quero um update com essas duas informações concatenadas, logo, estou encontrando dificuldade
em formata-las, uma vez que a v_2 recebe por arquivos vários "pipes" e o sql entende
que esses são parte da concatenação.

Teria outra forma?
Avatar do usuário
stcoutinho
Moderador
Moderador
Mensagens: 850
Registrado em: Qua, 11 Mai 2011 5:15 pm
Localização: são Paulo - SP

Borges,

Tudo bem?

Você diz que estes "|" estão impactando na sua concatenação, talvez você possa substituir eles por ";" (ponto-virgula) ou outro caractere.

Seu comando poderia ser algo como

Selecionar tudo

update divida
set div_bem = v_1 || REPLACE(v_2,'|',';')
where div_nrocontrato = p_contrato
and div_pro_cod = C_PRODUTO
and DIV_VALIDO = 1
and div_dataalteracao=sysdate;
Não sei se ajuda, mas seria uma opção.

Abraços,

Sergio Coutinho
borges_rsbr
Rank: Estagiário Pleno
Rank: Estagiário Pleno
Mensagens: 5
Registrado em: Qua, 12 Nov 2014 10:52 am

[RESOLVIDO]

Obrigado a todos pela ajuda.

Selecionar tudo

   select distinct div_cod, div_bem, div_dev_cod 
     into v_div_cod, v_divbem, v_dev_cod
     from divida
    where div_pro_cod = C_PRODUTO
      and div_nrocontrato = p_contrato
      and DIV_VALIDO = 1;


--Insere nova informação
--Altera algum dado recebido    
--Se não tem nada novo, não faz nada.


    v_posIni := INSTR(v_divbem,'*',1,1)-1;
               /*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;*/
   
     v_AjusteBem := v_origem || '|' || v_contador || '|' || v_data || ' ';
   
     if v_AjusteBem <> nvl(substr(v_divbem,1,v_posIni),' ')  
     then
     
        if v_posIni =0 then
            v_posIni :=1;
        end if;    
       
     if  substr(v_divbem,v_posIni,1)= ' ' then 
         v_posIni :=  v_posIni +1;
     end if;    
     
     
      update divida
       set div_bem = v_AjusteBem || substr(v_divbem,v_posIni,255)  ,div_dataalteracao=sysdate
       where div_nrocontrato = p_contrato
         and div_pro_cod = C_PRODUTO
         and DIV_VALIDO = 1
         and div_cod=v_div_cod;
         
       indicarRadarRenovDevedor(v_dev_cod);
Responder
  • Informação
  • Quem está online

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