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