如何捕获 PL/SQL 脚本中的所有异常?
How to catch all exceptions in PL/SQL script?
目前我正在编写一个带有错误处理的更新脚本。此脚本的一部分包含对可能不存在的 table 的调用。所以我想抓住这个例外。但是,当运行 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:
为什么不直接显示错误代码?谢谢!
如果您使用 non-existing table - 那是语法错误 - plsql 块无效,不能是 运行。
当块为 运行ning.
时异常处理有效
如果您需要使用可能不存在的table,可以使用动态sql(立即执行'select ... from non_existing_table')以避免编译错误。
或在 all_tables 视图中检查是否存在 table。
目前我正在编写一个带有错误处理的更新脚本。此脚本的一部分包含对可能不存在的 table 的调用。所以我想抓住这个例外。但是,当运行 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:
为什么不直接显示错误代码?谢谢!
如果您使用 non-existing table - 那是语法错误 - plsql 块无效,不能是 运行。 当块为 运行ning.
时异常处理有效如果您需要使用可能不存在的table,可以使用动态sql(立即执行'select ... from non_existing_table')以避免编译错误。
或在 all_tables 视图中检查是否存在 table。