Oracle bulk insert 0 2 3,004

by 대한민국1 [PL/SQL] 오라클 BULK BULK INSERT [2020.10.27 15:40:42]


안녕하세요 어느새 SQL관련 질문만 생기면 구루비를 찾게되네요... 구루비 회원분들 늘 감사합니다

다름이아니라 제가 이번에 EXCEL데이터 100만여개를 C# Winform에서 테이블과 매칭하고 해당 데이터를 insert 할것인지, update할것인지 선택 후 쿼리로 만들어서 테이블에 쌓는 TEST 작업을 하게되었는데 속도가 안나와서 찾다보니 oracle bulk insert라는것을 알게되었습니다. 그래서 막상 사용해보려고하니 어렵고, 예제를 찾아보니 테이블끼리의 데이터 복사와 같은 예제만 인터넷에 나와있어서 헤매고 있어 질문드립니다...

 

상황 : EXCEL데이터를 insert작업 -> 100만여개의 데이터row가 insert문 100만여개로 만들어지고 테이블에 insert.

테이블에 들어 간 데이터

version query
1 insert into A_TABLE(A,~~) VALUES('1',~~)
1 insert into A_TABLE(A,~~) VALUES('1',~~)
1 insert into A_TABLE(A,~~) VALUES('1',~~)
1 insert into A_TABLE(A,~~) VALUES('1',~~)

 

table에 데이터로 들어간 스트링쿼리(insert into ~~~)를 한꺼번에 bulk로 실행시킬 수 있는 방법의 프로시저 예제를 찾고있습니다..

 

by 대한민국1 [2020.10.27 16:58:17]
DECLARE
    TYPE TYPE_TARGET IS TABLE OF A_TEST%ROWTYPE;
    TARGET_ARRAY TYPE_TARGET;
    CURSOR TARGET_CURSOR IS SELECT VRSN, QUERY FROM A_TEST WHERE VRSN = '20201023002';
BEGIN
    OPEN TARGET_CURSOR;
    LOOP
        FETCH TARGET_CURSOR BULK COLLECT INTO TARGET_ARRAY LIMIT 100000;
        FORALL I IN 1..TARGET_ARRAY.COUNT
            EXECUTE IMMEDIATE TARGET_ARRAY(I).QUERY;
        EXIT WHEN TARGET_CURSOR%NOTFOUND;
    END LOOP;
    CLOSE TARGET_CURSOR;
END;

현재 이런식으로 작성을 해보았는데

오류 보고 -
ORA-06550: 줄 10, 열13:PLS-00801: 내부 오류 [*** ASSERT at file pdw4.c, line 3571; Can't handle Object = -2147483542 in D_S_ED -2147483591.; Xanon__A19D7EA4__AB[10, 13]]
06550. 00000 -  "line %s, column %s:\n%s"
*Cause:    Usually a PL/SQL compilation error.
*Action:

라는 에러메시지가 나옵니다.


by 마농 [2020.10.27 17:35:01]

엑셀자료를 가공하여 Insert 문장을 만들어 올리지 마시고,
엑셀자료를 그대로 테이블로 올린 뒤 MERGE INTO 구문을 이용하는 건 어떤가요?

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