【问题标题】:How to catch all exceptions in PL/SQL script?如何捕获 PL/SQL 脚本中的所有异常?
【发布时间】:2016-04-11 13:31:44
【问题描述】:

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

脚本(简化):

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

SQL 开发者脚本输出:

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:

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

【问题讨论】:

    标签: plsql exception-handling oracle-sqldeveloper


    【解决方案1】:

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

    如果你需要使用可能不存在的表,使用可以使用动态sql(execute immediate 'select ... from non_existing_table')以避免编译错误。

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

    【讨论】:

    • 谢谢,这行得通。我已将 SELECT 查询替换为: EXECUTE IMMEDIATE 'SELECT VersionNumber FROM DbVersion';
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-09-11
    • 2018-07-15
    • 1970-01-01
    • 1970-01-01
    • 2023-03-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多