https://youtu.be/b-IxbRmwpGE오라클 데이터 입력시 중복되는 경우 중복되지 않는 데이터만 입력, IGNORE_ROW_ON_DUPKEY_INDEX 힌트, DML Error Logging사용법(자바학원/오라클학원)
http://ojc.asia/bbs/board.php?bo_table=LecHINT&wr_id=326
ojc.asia

https://www.youtube.com/watch?v=RsswtJnUFP0&list=PLxU-iZCqT52DFRbLFQIgGUFp-5En2DYRG&index=27

ORACLE HINT
데이터 입력시 중복되는 경우 오류를 발생시키지 않고 중복되지 않는 데이터만 입력
IGNORE_ROW_ON_DUPKEY_INDEX 힌트이용
DML Error Logging 이용
실습 : 오라클19C
자주하는 작업 중 하나는 INSERT… SELECT… 문을 이용하여 대량의 데이터를 INSERT 하는 일이다. 이 경우 키(Primary Key) 값이 중복되어 무결성 제약조건 오류가 발생할 수 있는데 이 때 INSERT문은 롤백 된다.
오라클 10g의 New Feature로 소개되었던 DML Error Logging을 이용하여 오류가 발생한 레코드를 별도의 로깅 테이블에 기록하고 에러 때문에 DML이 중지되는 것을 막을 수 있지만 사용하기에 번거롭다.
오라클 10g의 DML Error Logging은 아래 URL에서 확인하자.
http://ojc.asia/bbs/board.php?bo_table=Cyber&wr_id=17
Oracle 11g에서 새로 소개된 ignore_row_on_dupkey_index 힌트를 사용하면 쉽게 해결할 수 있는데, 데이터 키값이 중복되는 경우 오류를 발생시키지 않고 중복되지 않는 데이터만 입력할 수 있게 해준다. 아쉬운 점이라면 SINGLE INSERT문만 지원하고 UPDATE, DELETE, MERGE, MULTI INSERT 구문에서는 안 된다는 것이며 APPEND, PARALEL 힌트와 같이 사용하면 이 두 힌트가 무시되고 Direct Path Load는 지원하지 않는다.
SQL> create table onj (
id number constraint pk_onj primary key,
name varchar2(20)
);
SQL> insert into onj values (1, '1길동');
SQL> insert into onj values (2, '2길동');
SQL> insert into onj values (3, '3길동');
SQL> commit;
SQL> select * from onj;
ID NAME
---------- --------------------
1 1길동
2 2길동
3 3길동
SQL> create table onj_old (
id number primary key,
name varchar2(20)
);
SQL> insert into onj_old values (1, '1길동');
SQL> insert into onj_old values (4, '4길동');
SQL> insert into onj_old values (5, '5길동');
SQL> commit;
-- onj_old의 내용을 onj 테이블로 insert하자. 1번 데이터가 중복되는 상황이다.
SQL> insert into onj select * from onj_old;
1행에 오류:
ORA-00001: 무결성 제약 조건(SCOTT.PK_ONJ)에 위배됩니다
-- ignore_row_on_dupkey_index 힌트를 사용하자.
SQL> SELECT a.index_name, a.column_name, b.visibility
FROM user_ind_columns a, user_indexes b
WHERE a.table_name = 'ONJ'
AND a.index_name = b.index_name
AND a.column_name = 'ID'
INDEX_NAME COLUMN_NAME VISIBLITY
----------------------------------------------------
PK_ONJ ID VISIBLE
SQL> insert /*+ ignore_row_on_dupkey_index(onj PK_ONJ) */ into onj select * from onj_old;
2 개의 행이 만들어졌습니다.
SQL> commit;
SQL> select * from onj;
ID NAME
---------- --------------------
1 1길동
2 2길동
3 3길동
4 4길동
5 5길동
#IGNORE_ROW_ON_DUPKEY_INDEX, #DML에러로깅, #DML에러로그, #오라클동영상, #INSERT힌트, #오라클교육, #오라클학원, #SQL학원, #SQL교육, IGNORE_ROW_ON_DUPKEY_INDEX, DML에러로깅, DML에러로그, 오라클동영상, INSERT힌트, 오라클교육, 오라클학원, SQL학원, SQL교육,