Không. Toàn bộ khối sẽ được khôi phục nếu không thành công, nhưng raise
riêng câu lệnh không thực hiện khôi phục.
Ví dụ:khối này không thành công và hoàn toàn được khôi phục lại (chính xác như thể nó là một insert
trong SQL vv):
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
Nhưng khối này không được khôi phục lại, mặc dù có raise
bên trong nó:
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.