2012-05-04 28 views
3

我試圖從查詢失敗並返回遊標失敗狀態時,從數據庫調用中返回SQL查詢。該查詢字符串將用於記錄目的。Oracle - 在發生異常時將字符串作爲字符串獲取

執行此操作的一種方法是將包含SQL查詢的變量保存爲字符串,然後用異常處理程序將每個查詢包裝在PL/SQL塊中,如果發生異常,則返回查詢字符串UI組件的失敗狀態。

有沒有更好的方法來做到這一點? Oracle異常對象或任何其他包是否支持此功能?

這個問題似乎是線程重複:Obtain the Query/CommandText that caused a SQLException

但是,我沒有找到該線程解決這個問題,我想知道是否存在由甲骨文支持的任何新的軟件包爲我們提供了導致異常發生的查詢字符串。

+1

http://stackoverflow.com/a/493590/409172可能會有所幫助。儘管如果您調用運行SQL的過程,它可能會記錄該過程調用,而不是真正導致失敗的SQL。 –

+0

你正在尋找這樣做_outside_ PL/SQL塊或外部塊嗎?即如果您運行'select * from duala;'在SQL * Plus中它會被記錄在某處? – Ben

+0

@jonearles,我會通讀它並讓你知道它是否有效,謝謝! – Shankar

回答

1

當您從外部語言(Java,C#)調用數據庫時,您可以通過實現您自己的JDBC(或其他)驅動程序來執行此操作。

您可以通過將現實世界委託給普通驅動程序來實現這一點,但是無論何時將語句發送到數據庫,您都會記住該語句,並且如果導致異常,則會創建一個新的異常,其中還包括sql語句(可能還有綁定變量)。

請注意,這隻會給你你的發言。如果你執行一個存儲過程或者觸發一個觸發器,而這個觸發器失敗了,你只會得到原來的語句而不是實際失敗的語句。

+0

是的,我試圖調用存儲過程。所以,我不知道如何獲取失敗的查詢 – Shankar