반응형
리스트 파라메터의 foreach 사용방법에 대해서는 아래 게시글을 참고해주세요.
시퀀스를 키값으로 갖는 테이블의 데이터를 INSERT할 때, 보통 시퀀스를 생성하여 아래와 같이 추가한다.
<insert id="insCustomer" parameterType="customerVO">
<selectKey keyProperty="customerSeq" resultType="String" order="BEFORE">
SELECT CUSTOMER_SEQ.NEXTVAL AS customerSeq FROM SYS.DUAL
</selectKey>
INSERT INTO WEB_G_CUSTOMER (
CUSTOMER_SEQ
, CUSTOMER_DIV
, EMAIL
, PASSWORD
, TITLE
, CONTENT
, REG_DT
, PROGRESS_CD
) VALUES (
#{customerSeq}
, '4'
, #{email}
, #{password}
, #{title}
, #{content}
, SYSDATE
, #{progressCd}
)
</insert>
그렇다면, 파라메터가 리스트인 경우는 시퀀스를 어떻게 가져와서 저장해야할까?
구조상 INSERT를 할때마다 시퀀스의 NEXTVAL값을 가져와서 추가를 해야하는데,
foreach 태그 내 selectKey 태그를 사용하면 아래와 같은 에러가 뜨는 것을 확인할 수 있다.
The content of element type "foreach" must match "(include|trim|where|set|foreach|choose|if|bind)".
그렇다면 시퀀스 자동증가 테이블의 리스트 파라메터를 INSERT할 때는 다음과 같이 하면 된다 !
<update id="insFileList" parameterType="java.util.List">
INSERT INTO WEB_G_FILE (
FILE_SEQ
, FILE_PATH
, REAL_FILE_NM
, FILE_NM
, FILE_EXTENSION
, FILE_SIZE
, REG_DT
, USE_YN
, BOARD_SEQ
, BOARD_DIV
)
SELECT FILE_SEQ.NEXTVAL AS fileSeq
, T.*
FROM (
<foreach collection="list" item="item" index="index" separator="union all">
SELECT #{item.filePath} as filePath
, #{item.realFileNm} as realFileNm
, #{item.fileNm} as fileNm
, #{item.fileExtension} as fileExtension
, #{item.fileSize} as fileSize
, SYSDATE as regDt
, 'Y' as useYn
, #{item.boardSeq} as boardSeq
, '4' as boardDiv
FROM SYS.DUAL
</foreach>
) T
</update>
시퀀스 생성방법을 모른다면 다음 게시글을 참고하자 !
728x90
반응형
'Database > MyBatis' 카테고리의 다른 글
[MyBatis] 중복 쿼리 줄여주는 sql, include, property 태그 문법 살펴보기 (3) | 2022.07.12 |
---|---|
[MyBatis] For input string: "문자" 오류 해결방법 (1) | 2021.08.27 |
[MyBatis] List 파라메터 foreach 사용 (INSERT, DELETE) - MySQL (0) | 2020.09.15 |
[MyBatis] #{ } 과 ${ } 차이 (0) | 2020.09.04 |
[MyBatis] List 파라메터 foreach 사용 (INSERT, DELETE, MERGE, UPDATE) - Oracle (0) | 2019.08.13 |
댓글