नहीं, समग्र रूप से ब्लॉक विफलता पर वापस लुढ़क जाएगा, लेकिन raise
स्टेटमेंट अपने आप रोलबैक नहीं करता है।
उदाहरण के लिए, यह ब्लॉक विफल हो जाता है और परोक्ष रूप से वापस लुढ़क जाता है (बिल्कुल जैसे कि यह एक SQL insert
था) आदि):
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
लेकिन यह ब्लॉक वापस नहीं लिया गया है, भले ही एक raise
. है इसके अंदर:
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.