快速而直接的问题:
我正在编写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参数?
非常感谢。
答案 0 :(得分:3)
请参阅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]
的问候,
罗布。