ORACLE 다중insert 질문드립니다! 0 6 1,725

by 포병이짱이여 INSERT ALL INSERT INTO UNION ALL [2022.08.08 17:49:04]


오라클 10버전을 사용중입니다.

현재 API데이터를 호출해서 매 호출당 500건씩 INSERT하는 기능을 만들고 있습니다.

1. 매 호출당 500건씩 INSERT하는데 적게는 3천건 많게는 20만건까지 등록됩니다.

(호출데이터가 3천건이면 500건씩 6번반복)

2. INSERT할때 PK 체크를 하여 중복값은 INSERT가 되면 안됩니다.

현재 위와같은 상황입니다.

INSERT INTO UNION ALL을 사용하였고 PK중복 제외조건을 추가하였습니다.

 

INSERT INTO TABLE_NAME (A, B, C)

SELECT 'A', 'B', 'C' FROM DUAL WHERE NOT EXISTS (SELECT 1 FROM TABLE_NAME2 WHERE A = 'A') UNION ALL

SELECT 'B', 'C', 'D' FROM DUAL WHERE NOT EXISTS (SELECT 1 FROM TABLE_NAME2 WHERE A = 'B') UNION ALL

SELECT 'C', 'D', 'E' FROM DUAL WHERE NOT EXISTS (SELECT 1 FROM TABLE_NAME2 WHERE A = 'C')

위와같은 형태로.. 한번에 500건씩 insert하는데 500건당 시간이 1~2분이 넘게 걸리는 상황입니다.

그렇다고 INSERT를 한번씩 호출하려니 자바쪽에 부담이 되는거같고..

어떤 방식으로 진행하면 시간이 단축되는지 궁금합니다.

by pajama [2022.08.08 20:46:55]

merge 문은 성능이 어떨까요? 

MERGE INTO TABLE_NAME
USING (SELECT 'A' A, 'B' B, 'C' C FROM DUAL) DUMMY
ON (TABLE_NAME.A = DUMMY.A)
WHEN NOT MATCHED THEN 
INSERT (A,B,C) VALUES (DUMMY.A, DUMMY.B, DUMMY.C)
;

 


by 포병이짱이여 [2022.08.09 09:36:02]

merge문은 한번의 쿼리로 다중insert가 가능하나요?? 찾아보고 있는데 잘 안나오네요ㅠㅠ


by pajama [2022.08.09 14:14:22]

using 절에 insert 하시려는 select 문장을 쓰시면 될듯합니다.

 

MERGE INTO TABLE_NAME
USING (
SELECT 'A' A, 'B' B, 'C' C FROM DUAL UNION ALL
SELECT 'B', 'C', 'D'  FROM DUAL UNION ALL
SELECT 'C', 'D', 'E'  FROM DUAL
) DUMMY
ON (TABLE_NAME.A = DUMMY.A)
WHEN NOT MATCHED THEN
INSERT (A,B,C) VALUES (DUMMY.A, DUMMY.B, DUMMY.C)
;

 


by 포병이짱이여 [2022.08.12 15:48:28]

감사합니다! 다른 급한부분 해결하고나서 바로 사용해보겠습니다!


by 우리집아찌 [2022.08.12 08:57:43]

10g 에서 되는지 모르겠네요

insert all 로 여러건씩 넣어서 처리한적 있습니다.

생각보다  성능이 괜찮았습니다

http://www.gurubee.net/lecture/2688


by 포병이짱이여 [2022.08.12 15:49:56]

감사합니다! insert all when은 안써봤는데 사용이 되는지 확인해보겠습니다!

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입