PL/SQL 中的异常处理。 [关闭]

Posted

技术标签:

【中文标题】PL/SQL 中的异常处理。 [关闭]【英文标题】:Exception Handling in PL/SQL. [closed] 【发布时间】:2013-02-27 17:49:36 【问题描述】:

谁能解释一下为什么下面代码中的答案是“Inside OTHERS”而不是“ORA -20002 5 大于 3”

BEGIN
IF 5>3 THEN
    RAISE_APPLICATION_ERROR (-20002, ‘5 is greater than 3’);
END IF;
EXCEPTION
    WHEN OTHERS THEN
        DBMS_OUTPUT.PUT_LINE(‘Inside OTHERS’);
END;

答案:在 OTHERS 内部

【问题讨论】:

【参考方案1】:

因为您正在捕获引发的异常并在控制台中打印消息“Inside OTHERS”。

我认为你需要这样的东西:

DECLARE
   comparison_error exception;
   PRAGMA EXCEPTION_INIT(comparison_error, -20002);
BEGIN
IF 5>3 THEN
    RAISE_APPLICATION_ERROR (comparison_error, '5 is greater than 3');
END IF;
EXCEPTION
    WHEN comparison_error THEN
        DBMS_OUTPUT.PUT_LINE('SQLERRM: ' || SQLERRM);
    WHEN OTHERS THEN
        DBMS_OUTPUT.PUT_LINE('Inside OTHERS');
END;

【讨论】:

感谢您的回答。 :)【参考方案2】:

试试这个:

BEGIN
IF 5>3 THEN
RAISE_APPLICATION_ERROR (-20002, '5 is greater than 3');
END IF;
EXCEPTION
WHEN OTHERS THEN
    DBMS_OUTPUT.PUT_LINE(sqlerrm);
    DBMS_OUTPUT.PUT_LINE('Inside OTHERS');
END;

【讨论】:

以上是关于PL/SQL 中的异常处理。 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

PL/SQL 中的异常处理和回滚

处理过程 PL/SQL 的异常

如何以不同的方式处理 PL/SQL 中的不同异常?

检查 PL/SQL 异常块中的特定错误代码

PL/SQL 异常错误处理

PL/SQL 在 for 循环中执行即时异常处理