1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
|
create or replace PROCEDURE "INSERT_TEST" IS
cursor doce is
select *
from liquid ;
enreg liquid%rowtype;
reste_liq number :=0;
reste_moy number :=0;
--
Begin
For doc in doce
Loop
begin
<<outer >>
for liq in (select liqu,m_total from liquid where c_quit= doc.c_quit)
loop
reste_liq := liq.m_total;
DBMS_OUTPUT.PUT_LINE('reste_liq init est de '|| reste_liq || ' pour la liquidation ' || liq.liqu);
for det in (select distinct moyen, montant from moy_liq where c_quit = doc.c_quit )
loop
reste_moy := det.montant;
DBMS_OUTPUT.PUT_LINE('reste_moy init est de '|| reste_moy|| ' pour le moyen ' || det.moyen);
if (reste_liq <= reste_moy) then
insert into resultat(liqu,moyen,montant)
values(liq.liqu,det.moyen,reste_liq);
reste_liq := reste_liq - liq.m_total;
reste_moy := reste_moy - liq.m_total;
DBMS_OUTPUT.PUT_LINE('reste_moy après insert est de '|| reste_moy);
-- sortir er passer à l'opération suivante(liq)
elsif (reste_liq > reste_moy) then
insert into resultat(liqu,moyen,montant)
values(liq.liqu,det.moyen,reste_moy);
reste_moy := reste_moy - det.montant;
reste_liq := reste_liq - det.montant;
DBMS_OUTPUT.PUT_LINE('reste_liq après insert est de '|| reste_liq);
-- sortir et passer au moyen suivant (det)
end if;
DBMS_OUTPUT.PUT_LINE('Avant exit inner ');
exit when reste_liq >=0 ;
DBMS_OUTPUT.PUT_LINE('Après exit inner ');
end loop;
DBMS_OUTPUT.PUT_LINE('Avant exit outer ');
exit when reste_moy >=0 ;
DBMS_OUTPUT.PUT_LINE('Après exit outer ');
end loop;
-- end loop;
end;
---
end loop;
commit;
End; |
Partager