ale*_*x.k 1 sql oracle sql-insert
我想知道是否有任何方法继续插入重复键错误后选择.含义:我想忽略该异常并继续插入下一条记录.我熟悉ignore_row_on_dupkey_index,但据我所知,不应该在生产环境中使用提示.
几件事情:1.查询将数百万条记录插入空表中.我更喜欢一个好的解决方案,对性能影响很小.
谢谢,亚历克斯
使用ignore_row_on_dupkey_index的代码示例:
CREATE TABLE customers
( customer_id number(10) NOT NULL,
customer_name varchar2(50) NOT NULL,
city varchar2(50),
CONSTRAINT customers_pk PRIMARY KEY (customer_id)
);
CREATE TABLE customers_2
( customer_id number(10) NOT NULL,
customer_name varchar2(50) NOT NULL,
city varchar2(50)
);
insert into customers_2 values(1,'A','TLV');
insert into customers_2 values(2,'B','TLV');
insert into customers_2 values(2,'C','TLV');
insert into customers_2 values(3,'C','TLV');
SELECT * FROM customers_2
insert /*+ ignore_row_on_dupkey_index(customers, customers_pk) */
into customers select * from customers_2
select * from Customers;
Run Code Online (Sandbox Code Playgroud)
首先,这个特定提示ignore_row_on_dupkey_index与其他提示不同.
您提到的限制通常涉及与性能调整有关的提示 - 这些提示被认为是最后的手段.
但是,可以实现相同的结果 merge
merge into "customers" a
using
(
select * from customers_2
) b
on (a.customer_id = b.customer_id)
when not matched then
insert (customer_id , customer_name,city)
values (b.customer_id , b.customer_name, b.city);
Run Code Online (Sandbox Code Playgroud)
此外,该SO 帖中描述了另一种方法. LOG ERRORS REJECT LIMIT UNLIMITED