gpt4 book ai didi

oracle - 调试 Oracle 批量 DML 错误 - 如何确定哪个值导致了错误?

转载 作者:行者123 更新时间:2023-12-02 06:45:16 25 4
gpt4 key购买 nike

我正在尝试调试在一种环境中发生的 DML 错误,但在其他环境中则没有。设置是这样的:

我有大约 10 组 DML 操作(从远程表批量获取,批量插入本地表),其中两组给出 DML 错误,“无效数字”风格,另一组是“PL/SQL: numeric或值错误:批量绑定(bind):截断绑定(bind)”。

我尝试将数据复制到“良好”环境,但无法重现相同的错误。因此,我现在正在尝试构建一个更强大的错误处理程序来捕获这些错误并帮助查明哪条数据给我带来了问题。

我所拥有的看起来像这样:

...
loop
fetch c_some_data bulk collect into v_arr limit v_limit_size;

forall i in 1..v_arr.count SAVE EXCEPTIONS
insert into table_abc_1 values v_arr(i);
exit when c_some_data%notfound;
end loop;
...
exception
when X_DML_ERRORS then
declare
j integer;
begin
FOR j IN 1 .. SQL%BULK_EXCEPTIONS.COUNT LOOP
begin
/*only print the KEY fields for this table,
this table has (I think) close to 20 fields*/
dbms_output.put_line('DML Bulk-operation error: ' ||
' Error Code: '||SQLERRM(-SQL%BULK_EXCEPTIONS(j).ERROR_CODE)||'; '||
v_arr(SQL%BULK_EXCEPTIONS(j).ERROR_INDEX).stage||'; '||
v_arr(SQL%BULK_EXCEPTIONS(j).ERROR_INDEX).id||'; '||
v_arr(SQL%BULK_EXCEPTIONS(j).ERROR_INDEX).code||'; ')

end;

end loop;
end;
when others then
PKG_EXCPTN.sp_generic_exception_handler;
end;

我确信我可以打印所有列,但表很大(有些有 > 20 列),并且有 10 个代码块可能存在此问题。它还需要有人查看消息中的每个值,看看它是否与列类型匹配(varchar2 与数字)。

是否有一种简单的方法可以打印发生错误的字段以及导致错误的值?

(使用 Oracle 10g)

最佳答案

您可以在 DML 语句中使用 LOG ERRORS INTO ,这将允许您将错误和错误数据转储到表中,以便稍后检查它们。

参见:http://www.oracle-developer.net/display.php?id=329

和:http://download.oracle.com/docs/cd/B19306_01/server.102/b14200/statements_9014.htm#BGBDIGAH

关于oracle - 调试 Oracle 批量 DML 错误 - 如何确定哪个值导致了错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8158054/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com