gpt4 book ai didi

sql - Oracle SQL 多重插入忽略重复行

转载 作者:行者123 更新时间:2023-12-02 05:30:24 24 4
gpt4 key购买 nike

我想知道在 Oracle 中将多条记录复制到忽略特定索引上的重复值的数据库中的首选技术是什么。这些语句在语句中明确说明,而不是来自另一个表

INSERT INTO EXAMPLE (A, B, C, D) VALUES (null,'example1','example2',EXAMPLE_SEQ.nextval);
INSERT INTO EXAMPLE (A, B, C, D) VALUES (null,'example2','example3',EXAMPLE_SEQ.nextval);
INSERT INTO EXAMPLE (A, B, C, D) VALUES (null,'example4','example5',EXAMPLE_SEQ.nextval);

我目前正在这样做并手动检查,但需要找到一种方法使这些可以作为脚本处理

最佳答案

如果您决定坚持使用 INSERTs,您可以通过使用约束(无论是主键还是唯一键)来防止插入重复行。如果它碰巧违反了唯一约束,你的脚本将停止,你将不得不回滚之前插入所做的所有更改(除非你已经提交了每一个)。要处理该异常,您可以编写类似的 pls/sql block 。

declare
l_unique_exception exception;
pragma exception_init(l_unique_exception, -1);
begin
insert into test(id, test_vector)
values(1, 123);
insert into test(id, test_vector)
values(1, 123);
......
Insert into
commit;
exception
when l_unique_exception
then process the exception;
end;

另外

如果您想在其中一个插入引发异常后继续,那么以下示例可能会派上用场。

  1. 创建一个包含错误的表。例如。

    创建表 tb_errors (
    错误标记 varchar2(123)
    )

  2. 提供错误记录调用 CREATE_ERROR_LOG DBMS_ERRLOG的程序包裹

    DBMS_ERRLOG.CREATE_ERROR_LOG('YourDmlTable. Test in this case', 'tb_errors');

  3. log errors into 子句添加到每个 insert

举个例子

declare
begin
insert into test(id, col1)
values(1, 123)
log errors into tb_errors('simple expression') reject limit unlimited;
insert into test(id, col1)
values(1, 123)
log errors into tb_errors('simple expression') reject limit unlimited;
insert into test(id, col1)
values(1, 123)
log errors into tb_errors('simple expression') reject limit unlimited;
commit;
end;

脚本完成后,您可以查询错误记录表,在本例中为 tb_errors,以查看出现了什么问题。

关于sql - Oracle SQL 多重插入忽略重复行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12473372/

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