Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Plsql 如何捕获PL/SQL脚本中的所有异常?_Plsql_Exception Handling_Oracle Sqldeveloper - Fatal编程技术网

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

Plsql 如何捕获PL/SQL脚本中的所有异常?,plsql,exception-handling,oracle-sqldeveloper,Plsql,Exception Handling,Oracle Sqldeveloper,目前我正在编写一个带有错误处理的更新脚本。此脚本的一部分包含对可能不存在的表的调用。所以我想抓住这个例外。但是,在SQLDeveloper中运行脚本时,它似乎没有捕获异常 脚本(简化): SQL开发人员脚本输出: Error starting at line 2 in command: BEGIN SELECT VersionNumber FROM DbVersion; EXCEPTION WHEN OTHERS THEN DBMS_OUTPUT.pu

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

脚本(简化):

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块无效,无法运行。 异常处理在块运行时起作用

若您需要使用可能不存在的表,可以使用动态sql(执行immediate'select…from non_existing_table')来避免编译错误


或者在“所有表”视图中检查表是否存在。

谢谢,可以了。我将SELECT查询替换为:立即执行“SELECT VersionNumber FROM DbVersion”;
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: