
Using Rollbacks With FORALL
DROP TABLE emp_temp CASCADE CONSTRAINTS PURGE;
CREATE TABLE emp_temp (
deptno NUMBER(2),
job VARCHAR2(18));
DECLARE
TYPE numlist IS TABLE OF NUMBER;
depts NUMLIST := Numlist(10,20,30);
BEGIN
INSERT INTO emp_temp
VALUES (10,
'Clerk');
-- Lengthening this job title causes an exception
INSERT INTO emp_temp
VALUES (20,
'Bookkeeper');
INSERT INTO emp_temp
VALUES (30,
'Analyst');
COMMIT;
FORALL j IN depts.FIRST..depts.LAST -- Run 3 UPDATE statements.
UPDATE emp_temp
SET job = job
||' (Senior)'
WHERE deptno = Depts(j);
-- raises a "value too large" exception
EXCEPTION
WHEN OTHERS THEN
dbms_output.Put_line('Problem in the FORALL statement.');
COMMIT; -- Commit results of successful updates.
END;
/
OUTPUT:-
Problem in the FORALL statement.
PL/SQL procedure successfully completed.

0 comments:
Post a Comment