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
|
begin
curseur1
loop
FORALL INTCONT IN 1..tableau.COUNT SAVE EXCEPTIONS
insert into table values(...);
EXCEPTION WHEN DML_ERRORS THEN
V_ERRORS := SQL%BULK_EXCEPTIONS.COUNT;
FOR i IN 1..V_ERRORS
LOOP
IF SQL%BULK_EXCEPTIONS(i).ERROR_CODE = -1 THEN
V_INDEX := SQL%BULK_EXCEPTIONS(i).ERROR_INDEX;
UPDATE table
SET c1 = NVL(tableau2(V_INDEX),0),
c2 = NVL(tableau3(V_INDEX),0),
c3 = NVL(tableau4(V_INDEX),0),
c4 = NVL(tableau5(V_INDEX),0),
c5 = SYSDATE
WHERE critere1
AND critere2
AND critere3;
END IF;
END LOOP;
END;
FORALL INTCONT IN 1..tableau.COUNT
UPDATE table
SET c1 = NVL(tableau2(V_INDEX),0),
c2 = NVL(tableau3(V_INDEX),0),
c3 = NVL(tableau4(V_INDEX),0),
c4 = NVL(tableau5(V_INDEX),0),
WHERE critere1
AND critere2
AND critere3
AND critere4;
END LOOP; |
Partager