2011-02-07 95 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] 

问候,
罗布。