오라클 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를 한번씩 호출하려니 자바쪽에 부담이 되는거같고..
어떤 방식으로 진행하면 시간이 단축되는지 궁금합니다.
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) ;