게으른 완벽주의자의 개발자 도전기
mapper 서브쿼리 작성 두가지 방법 (selectKey) 본문
실무에서는 반반 정도 쓴다고 한다.
첫번째 방법 (일반적인 방법)
<insert id="regNewEmp">
INSERT INTO TEST_EMP(
EMP_NUM
, EMP_NAME
, POSITION
, EMP_AGE
, DEPT_NUM
, GENDER
, EMP_TELL
)VALUES(
(SELECT 'EMP'||LPAD(NVL(MAX(TO_NUMBER(SUBSTR(EMP_NUM,4))),0)+1, 3 ,0) FROM TEST_EMP)
, #{empName}
, #{position}
, #{empAge}
, #{deptNum}
, #{gender}
, #{empTell}
)
두번째 방법(selectKey 사용)
<insert id="regNewEmp">
<selectKey resultType="String" keyProperty="empNum" order="BEFORE">
SELECT 'EMP'||LPAD(NVL(MAX(TO_NUMBER(SUBSTR(EMP_NUM,4))),0)+1, 3 ,0) FROM TEST_EMP
</selectKey>
INSERT INTO TEST_EMP(
EMP_NUM
, EMP_NAME
, POSITION
, EMP_AGE
, DEPT_NUM
, GENDER
, EMP_TELL
)VALUES(
#{empNum}
, #{empName}
, #{position}
, #{empAge}
, #{deptNum}
, #{gender}
, #{empTell}
)
selectKey
<selectKey resultType="String" keyProperty="empNum" order="BEFORE">
</selectKey>
-resultType = 결과를 자료형 어디에 담을 것인지?(String, int...)
- order = 쿼리 실행순서 before와 after가 있다
before insert 실행 전에 먼저 실행하겠다
after insert 실행 후 실행하겠다.
- keyProperty = 조회해서 어디에 담을래? (변수명 자체를 지정)
'SQL' 카테고리의 다른 글
장바구니 같은 상품 추가(merge(INSERT + UPDATE) into table using dual) (0) | 2022.08.22 |
---|---|
[DATABASE]union view 다중 insert (0) | 2022.08.21 |
ITEM_CODE(ITEM_001)쿼리로 만들기(LPAD, TO_NUMBER, SUBSTR, MAX, NVL, || 활용하기) (0) | 2022.08.13 |
오라클SQL Developer실행안됨 (windows를 복원하는 중) (0) | 2022.08.06 |
DataBase 주요 함수 정리 (0) | 2022.08.03 |