Non. Le bloc dans son ensemble sera annulé en cas d'échec, mais la raise
l'instruction seule n'effectue pas de restauration.
Par exemple, ce bloc échoue et est implicitement annulé (exactement comme s'il s'agissait d'un insert
SQL etc.):
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
Mais ce bloc n'est pas annulé, même s'il y a une raise
à l'intérieur :
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.