Translate

sexta-feira, 4 de julho de 2014

Retornar valores de duas colunas separados por determinado caracter

Neste caso, temos duas colunas:

Coluna Tipo   - possue varios tipos separados por "|"
Coluna Valor - possue varios valores separados por "|"

Para cada posição da coluna Tipo, deve-se pegar o valor correspondente da segunda coluna e realizar a soma conforme o tipo:

declare

  v_tp_pagamento owa_util.vc_arr;
  v_vl_pagamento owa_util.vc_arr;
  v_ca number := 0;
  v_cc number := 0;
  
begin
  for reg in (select 'EX|CCCA5549|CA' tipo
                    ,'0|376.66|855.52'     valor 
              from    dual
              union
              select 'EX|CCCA5549|CA' tipo
                    ,'0|356.32|154.32'     valor 
              from    dual) 
  loop
    v_tp_pagamento := fun_separa_texto(reg.tipo,'|');
    v_vl_pagamento := fun_separa_texto(reg.valor,'|');
    
    for x in v_tp_pagamento.first..v_tp_pagamento.last
    loop
      if v_tp_pagamento(x) = 'CA'
      then
        v_ca := v_ca + to_number(v_vl_pagamento(x), 'FM999999999990D90', 'NLS_NUMERIC_CHARACTERS=.,');
        dbms_output.put_line(v_vl_pagamento(x));
      elsif instr(v_tp_pagamento(x),'CC') > 0
      then
        v_cc := v_cc + to_number(v_vl_pagamento(x), 'FM999999999990D90', 'NLS_NUMERIC_CHARACTERS=.,');
        dbms_output.put_line(v_vl_pagamento(x));
      end if;
    end loop;
  end loop;
  
  dbms_output.put_line('v_ca := ' || v_ca);
  dbms_output.put_line('v_cc := ' || v_cc);
end; 


Resultado:

356.32
154.32
376.66
855.52
v_ca := 1009,84

v_cc := 732,98

Nenhum comentário:

Postar um comentário