데이터 적재 시 INSERT ~ SELECT ~를 사용하는 경우가 많은데 대량 적재 시 PK
중복 에러가 발생하면 데이터를 특정하기 어려운 경우가 있습니다.
11gR2 이후 버전부터는 ignore_row_on_dupkey_index 힌트를 사용하면 쉽게 해결할 수 있는데 키값이 중복되는 경우 오류를 발생시키지 않고 중복되지 않는 데이터만 입력해 주는 힌트 입니다.
11gR2 이후 버전부터는 ignore_row_on_dupkey_index 힌트를 사용하면 쉽게 해결할 수 있는데 키값이 중복되는 경우 오류를 발생시키지 않고 중복되지 않는 데이터만 입력해 주는 힌트 입니다.
아래 테스트 내용 확인하세요
테스트 테이블 생성
T1 테이블에 PK가 있고 중복되는 데이터 id=1 값을 T2에 생성
SQL> create table sk.t1 (
id number primary key,
name varchar2(20)
)
;
insert into sk.t1 values (1, '1길동');
insert into sk.t1 values (2, '2길동');
insert into sk.t1 values (3, '3길동');
SQL> select * from sk.t1;
ID NAME
---------- --------------------
1 1길동
2 2길동
3 3길동
create table sk.t2 (
id number primary key,
name varchar2(20)
);
insert into sk.t2 values (1, '1길동');
insert into sk.t2 values (4, '4길동');
insert into sk.t2 values (5, '5길동');
데이터 적재
T2테이블의 데이터를 T1에 INSERT 시 PK중복에러 발생
ignore_row_on_dupkey_index 힌트 사용 시 중복 값은 제외 후 나머지 데이터만 적재됨
ignore_row_on_dupkey_index 힌트 사용 시 중복 값은 제외 후 나머지 데이터만 적재됨
SQL> insert into sk.t1 select * from sk.t2 ;
insert into sk.t1 select * from sk.t2
*
ERROR at line 1:
ORA-00001: unique constraint (SK.SYS_C007926) violated
-- ignore_row_on_dupkey_index 힌트를 사용(테이블명 PK명)
SQL> insert /*+ ignore_row_on_dupkey_index(t1 SYS_C007926) */ into sk.t1 select * from sk.t2;
2 rows created.
SQL> commit ;
Commit complete.
SQL> select * from sk.t1 ;
ID NAME
---------- --------------------
1 1길동
2 2길동
3 3길동
4 4길동
5 5길동
댓글
댓글 쓰기