2011-02-07 94 views
2

快速而直接的問題:從PL/SQL返回錯誤

我在寫一個PL/SQL存儲過程。它包含一些可能會失敗的execute immediate調用。我不想提出錯誤。我希望存儲過程乾淨地完成它的執行並返回一個錯誤列表。就像:

for vRecord in vCursor 
loop 
    begin 
     execute immediate 'insert into t(a) values (' || vRecord.val || ')'; 
    when others then 
     -- store the error somewhere to return it!! 
    end; 
end loop; 

所以我的問題是:什麼是推薦的方式來返回這些錯誤?一張桌子?一個輸出參數?

非常感謝。

回答

3

哇,我只是在另一個線程回答類似的問題,迄今爲止的奇怪的一天。使用記錄表,並使用自治事務,如果你只是想記錄錯誤(或消息):

here

+0

謝謝!我想到了這一點。不知道這是不是最好的選擇。看起來像OVERKILL使用表只是爲了返回錯誤......無論如何感謝您的建議! – 2011-02-07 13:59:17

+0

千萬不要過度記錄錯誤,好的做法;)並且對於隨着時間的推移發生的事情你有一個審計追蹤,假設這是你在某個頻率上運行的東西。 – tbone 2011-02-07 14:25:12

3

從版本10g第2版起,您可以使用DML錯誤日誌存儲所有錯誤,在一個特殊的表。根據您發佈的代碼

http://download.oracle.com/docs/cd/E11882_01/appdev.112/e16760/d_errlog.htm#ARPLS680

其他一些建議:

1)這是沒有必要在這裏使用動態SQL你可以在這裏讀到它。只需使用此代替:

insert into t(a) values (vRecord.val); 

2)這裏沒有必要使用循環。只需使用一個INSERT/SELECT來代替:

insert into t(a) select [the query from your vCursor here] 

問候,
羅布。