Nee. Het blok als geheel wordt teruggedraaid als het mislukt, maar de raise
statement op zichzelf voert geen rollback uit.
Dit blok mislukt bijvoorbeeld en wordt impliciet teruggedraaid (precies alsof het een SQL insert
is enz.):
begin
insert into demo(id) values(1);
dbms_output.put_line(sql%rowcount || ' row inserted');
raise program_error;
exception
when program_error then raise;
end;
ERROR at line 1:
ORA-06501: PL/SQL: program error
ORA-06512: at line 6
SQL> select * from demo;
no rows selected
Maar dit blok wordt niet teruggedraaid, ook al is er een raise
erin:
begin
begin
insert into demo(id) values(1);
dbms_output.put_line(sql%rowcount || ' row inserted');
raise program_error;
exception
when program_error then
dbms_output.put_line('Raising exception');
raise;
end;
exception
when program_error then null;
end;
1 row inserted
Raising exception
PL/SQL procedure successfully completed.
SQL> select * from demo;
ID
----------
1
1 row selected.