2017-08-03 129 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