我有一个场景,我正在写这样的例外
when others then
rollback;
p_status := 'ERROR'; -- MODIFIED
p_status_dtl := sqlcode||' - '||substr(sqlerrm,1,100);
end;
如果我这样写
exception
when others then
p_status := 'ERROR'; -- MODIFIED
p_status_dtl := sqlcode||' - '||substr(sqlerrm,1,100);
rollback;
end;
是否会产生影响,如果是,那有什么区别。
答案 0 :(得分:3)
如果变量赋值不抛出(即p_status
和p_status_dtl
都是具有足够存储空间的正确数据类型),则示例相同。
如果变量赋值抛出,那么在第二个示例rollback
中不执行。
在下面的示例中,仅打印checkpoint 1
:
declare
v_foo varchar2(2) := 'AB';
v_bar number;
begin
-- raises ORA-01476: divisor is equal to zero
v_bar := 1/0;
exception
when others then
dbms_output.put_line('checkpoint 1');
-- raises ORA-06502: PL/SQL: numeric or value error: character string buffer too small
v_foo := 'TOO LONG';
dbms_output.put_line('checkpoint 2');
end;
/