给定一个简单的 SP 之类的;
CREATE OR REPLACE PROCEDURE TEST1
AS
BEGIN
EXECUTE IMMEDIATE 'truncate table missingtable';
dbms_output.put_line('here');
EXCEPTION
WHEN OTHERS THEN
IF SQLCODE != -942 THEN
RAISE;
END IF;
END;
我从来没有看到输出语句,我认为控制返回到同一个块,这是唯一的块..是的,如果我试图截断它,missingtable 会报告 -942。
这是一个逻辑问题,实际上异常发生了,但是只有当返回代码与发生错误的 942 不同时,您才编码以引发异常。
如果你想在你的第一个块中继续 dbms_output 你需要一个内部异常
CREATE OR REPLACE PROCEDURE TEST1
AS
BEGIN
BEGIN
EXECUTE IMMEDIATE 'truncate table missingtable';
EXCEPTION
WHEN OTHERS THEN
IF SQLCODE != -942 THEN
RAISE;
ELSE
NULL;
END IF;
END;
dbms_output.put_line('here');
END;
/
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句