Oracle Pl/SQL 异常流

库尔特

给定一个简单的 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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章