如何捕获PL / SQL脚本中的所有异常?

时间:2016-01-07 08:28:15

标签: plsql exception-handling oracle-sqldeveloper

目前我正在编写一个带错误处理的更新脚本。此脚本的一部分包含对可能不存在的表的调用。所以我想抓住异常。但是,在SQL Developer中运行脚本时,它似乎没有捕获异常。

脚本(简化):

BEGIN
    SELECT VersionNumber
    FROM DbVersion;
  EXCEPTION
    WHEN OTHERS THEN
        DBMS_OUTPUT.put_line(SQLCODE);
END;

SQL Developer脚本输出:

Error starting at line 2 in command:
BEGIN
    SELECT VersionNumber
    FROM DbVersion;
  EXCEPTION
    WHEN OTHERS THEN
        DBMS_OUTPUT.put_line(SQLCODE);
END;
Error report:
ORA-06550: line 3, column 10:
PL/SQL: ORA-00942: table or view does not exist
ORA-06550: line 2, column 5:
PL/SQL: SQL Statement ignored
06550. 00000 -  "line %s, column %s:\n%s"
*Cause:    Usually a PL/SQL compilation error.
*Action:

为什么不简单地显示错误代码?谢谢!

1 个答案:

答案 0 :(得分:3)

如果您使用的是不存在的表 - 该语法错误 - plsql块无效,无法运行。 块运行时异常处理有效。

如果您需要使用可能不存在的表,请使用动态sql(立即执行' select from from_existing_table')以避免编译错误。

或者在all_tables视图中检查表存在。