일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- INSERT
- 정보처리산업기사
- vue.js
- Tomcat
- insertAll
- JQuery
- mybatis
- jsp
- mysql
- swipe 배너
- 오라클
- Ajax
- egov
- spring
- MariaDB
- github
- 기출문제
- query
- 구멍가게코딩단
- bulkinsert
- NoSQL
- vscode tutorial
- vue Carousel
- checkbox
- 부스트코스
- 마스킹
- JAXBContext
- java
- jdbc
- JSON
Archives
- Today
- Total
개발새발
[oracle/mybatis]sequence를 포함한 bulk insert 본문
728x90
반응형
일반적으로 쓰는 bulk insert의 문법은 아래와 같다.
오라클의 INSERT ALL과 마이바티스의 foreach를 사용하여 INSERT ALL 이후의 문법을 여러 번 반복하는 것이다.
INSERT ALL
<foreach collection="list" index="index" item="list" >
INTO STUDENT_TABLE
(
STUDENT_ID
, STUDENT_SCHOOL_ID
, STUDENT_NAME
, STUENT_SEX
, STUDENT_ADDR
, STUDENT_AGE
)
VALUES
(
#{list.studentId}
, #{list.schoolId}
, #{list.studentName}
, #{list.studentSex}
, #{list.studentAddr}
, #{list.studentAge}
)
</foreach>
SELECT * FROM DUAL
하지만 테이블에 INSERT를 하면서 시퀀스를 사용해야한다면 위의 일반적인 bulk insert로는 에러가 난다.
따라서, 시퀀스를 따로 SELECT 해온 후 나머지 list로 돌릴 컬럼들만 서브쿼리 형식으로 foreach로 감싸준다.
그렇게 되면 separator="UNION ALL"로 해놓았기 때문에 foreach 돌릴 리스트 개수만큼 UNION ALL로 묶인다.
여기서 주의할 점은 서브쿼리 형식으로 리스트 개수만큼의 데이터들을 돌리기 때문에 foreach 태그 안 컬럼들은 INSERT 되어야 할 컬럼명에 맞게 ALIAS를 붙여줘야 한다.
INSERT INTO STUDENT_TABLE(
STUDENT_ID
, STUDENT_SCHOOL_ID
, STUDENT_NAME
, STUENT_SEX
, STUDENT_ADDR
, STUDENT_AGE
)
SELECT SEQ_STUDENT_ID.NEXTVAL
, D1.* FROM
(
<foreach collection="studentInfo" item="list" separator="UNION ALL">
SELECT
#{schoolId} AS STUDENT_SCHOOL_ID
, #{list.studentName} AS STUDENT_NAME
, #{list.studentSex} AS STUENT_SEX
, #{list.studentAddr} AS STUDENT_ADDR
, #{list.studentAge} AS STUDENT_AGE
FROM DUAL
</foreach>
) D1
728x90
반응형
'Data Base > oracle' 카테고리의 다른 글
[ORACLE] 숫자 마스킹 처리(치환) (0) | 2023.10.25 |
---|---|
[oracle] 28001 비밀번호 만료 (0) | 2019.12.22 |
Comments