gpt4 book ai didi

oracle - 捕获触发 DUP_VAL_ON_INDEX 的值

转载 作者:行者123 更新时间:2023-12-04 00:44:27 25 4
gpt4 key购买 nike

鉴于此示例 ( DUP_VAL_ON_INDEX Exception ),是否可以捕获违反约束的值以便记录它们?

如果批量插入产生多个违规,方法是否相同?

BEGIN
-- want to capture '01' and '02'
INSERT INTO Employee(ID)
SELECT ID
FROM (
SELECT '01' ID FROM DUAL
UNION
SELECT '02' ID FROM DUAL
);

EXCEPTION
WHEN DUP_VAL_ON_INDEX THEN
-- log values here
DBMS_OUTPUT.PUT_LINE('Duplicate value on an index');
END;

最佳答案

理想情况下,我会建议使用 DML 错误记录。例如

创建错误日志表

begin
dbms_errlog.create_error_log( dml_table_name => 'EMPLOYEE',
err_log_table_name => 'EMPLOYEE_ERR' );
end;

使用 DML 错误记录

BEGIN
insert into employee( id )
select id
from (select '01' id from dual
union all
select '02' from dual)
log errors into employee_err
reject limit unlimited;
END;

对于失败的每一行,这会将行的数据连同异常记录到 EMPLOYEE_ERR 表中。然后,您可以查询错误日志表以查看所有错误,而不仅仅是获取失败的第一行。

如果创建错误日志表不是一个选项,您可以通过批量操作从 SQL 迁移到 PL/SQL。这会更慢,但您可以使用 FORALL 语句的 SAVE EXCEPTIONS 子句来创建一个嵌套的异常表,然后您可以对其进行迭代。

关于oracle - 捕获触发 DUP_VAL_ON_INDEX 的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13569107/

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