【问题标题】:Oracle SQL error handling: catching the SQL-statementOracle SQL 错误处理:捕获 SQL 语句
【发布时间】:2017-08-03 08:58:13
【问题描述】:

在 PL/SQL 中,在我的异常处理程序中,我使用 dbms_utility.format_error_backtrace 来捕获错误的回溯。当我在过程中遇到主键冲突时,这将返回以下错误消息:

ORA-00001: unique constraint (MY_USER.MY_TABLE_PK) violated ORA-06512: at line 41

所以现在我知道主键 MY_TABLE_PK 在第 41 行被违反。我想知道的是导致此主键违反的实际 SQL 语句,所以我希望我的错误消息包含类似 INSERT INTO MY_TABLE ... 的内容如果这是第 41 行发生的情况。

有人知道怎么做吗?

编辑:

我知道该语句可以在第 41 行找到。但是,这不是我要问的。我要问的是如何在我的错误消息中包含导致错误的 SQL 语句。

【问题讨论】:

标签: sql oracle plsql error-handling backtrace


【解决方案1】:

如果您在无法使用编辑器向您显示数据库中的代码的情况下运行此程序,您可以执行以下操作;

SELECT line, text
FROM   all_source
WHERE  line BETWEEN :err_line - 10 AND :err_line + 10 AND name = :pkg

【讨论】:

  • 这并不总是有效,例如在上面的例子中,在第 nr 行附近。 41 语句是动态建立的。然后您的建议将返回使用的参数...
  • @Eric12345 - OP 没有提到动态 SQL,所以我没有考虑。但是,鉴于澄清,这个答案肯定没有用,所以我会删除它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-01
相关资源
最近更新 更多