从PL / SQL返回错误

时间:2011-02-07 13:48:16

标签: oracle plsql

快速而直接的问题:

我正在编写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;

所以我的问题是:返回这些错误的推荐方法是什么?一张桌子? out参数?

非常感谢。

2 个答案:

答案 0 :(得分:3)

哇,我刚才在另一个线程中回答了类似的问题,到目前为止这个奇怪的日子。如果您只想记录错误(或消息),请使用LOG表并使用自治事务:

请参阅here

答案 1 :(得分: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]

的问候,
罗布。