2017-08-03 133 views
0

在PL/SQL中,在我的异常处理程序中,我使用dbms_utility.format_error_backtrace来捕获错误的回溯。所以,现在Oracle SQL错误处理:捕获SQL语句

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语句。

+0

您编辑器应该能够显示41行 –

+0

可能这可以帮助https://livesql.oracle.com/apex/livesql/file/content_CSBE3ZJTSXBTUEI174J84WGO0.html [PL/SQL开发人员如何 – XING

+0

可能的复制获取插入失败的行?](https://stackoverflow.com/questions/13838446/pl-sql-developer-how-to-get-the-row-that-made-the-insert-fail) – Dmitry

回答

0

如果你正在运行这个你不能使用编辑器向你显示db中代码的地方,你可以执行以下操作;

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

这不会总是有效,例如在上面的第nr行的例子中。 41该声明是动态构建的。然后你的建议将返回使用的参数... – Eric12345

+0

@ Eric12345 - OP没有提到动态SQL,所以我没有考虑它。然而,鉴于澄清这个答案绝对没有用,所以我会删除它。 – BriteSponge