반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- DI
- java
- DIP
- JPA
- resultMap
- Javascript
- spring
- 싱글톤
- 필드 주입
- 생성자 주입
- sqld
- 스프링부트
- thymeleaf
- 스프링 빈
- 스프링 컨테이너
- assertThrows
- @Configuration
- SQL
- mybatis
- jdbc
- 스프링 부트
- db
- kafka
- Effective Java
- assertThat
- springboot
- 스프링 부트 입문
- 스프링 부트 기본
- 스프링 프레임워크
- 스프링
Archives
- Today
- Total
선 조치 후 분석
[SQL - ORACLE] selectKey?, 생성된 값 바로 사용하는 방법 본문
728x90
반응형
SMALL
개발을 하다가 A라는 테이블에 Insert를 하고, 연속으로 B라는 테이블에 저장한 A테이블의 값을 사용하여 Insert를 해야 하는 경우가 있다. 이런 문제를 해결하기 위해서 오라클의 selectKey 방법을 알게 되었다.
<insert id="insertA">
<selectKey resultType="string" keyProperty="ATCH_FILE_GRP_ID" order="BEFORE">
SELECT TO_CHAR(SYSDATE, 'YYYYMMDD') || LPAD(A.NEXTVAL, 16, 0) FROM DUAL
</selectKey>
INSERT INTO A
(
ATCH_FILE_GRP_ID, REG_DTM, REGR_ID, MOD_DTM, MODR_ID
)
VALUES
(
#{ATCH_FILE_GRP_ID}
, TO_CHAR(SYSDATE, 'YYYYMMDDHH24MMSS'), #{userId}, TO_CHAR(SYSDATE, 'YYYYMMDDHH24MMSS'), #{userId}
)
</insert>
<insert id="insertB">
INSERT INTO B
(
ATCH_FILE_GRP_ID,
SEQ, FILE_SIZE_VAL,
DNLD_CNTR, REG_DTM, REGR_ID, MOD_DTM, MODR_ID,
ATCH_FILE_URL_PATH_NM
)
VALUES
(
#{ATCH_FILE_GRP_ID},
#{SEQ}, #{attachSize},
0, TO_CHAR(SYSDATE, 'YYYYMMDDHH24MMSS'), #{userId}, TO_CHAR(SYSDATE, 'YYYYMMDDHH24MMSS'), #{userId},
#{downloadPath}
)
</insert>
'resultType' : 해당 컬럼의 데이터 타입
'keyProperty': 해당 컬럼명
'order' : 실행시킬 타이밍 (before:insert전 || after:insert후)
Insert 구문 안에 selectKey가 들어가 있다. 실제 A테이블에 Insert 하기 전에 selectKey에서 필요한 파라미터를 만들고 들고 있다가 B테이블에 A테이블의 값을 전달해 줄 수 있다.
selectKey는 즉, 생성된 값을 다음에 활용하기 위하여 저장한다는 데에 있다. 물론 쓰는 이유는 시퀀스로 사용하기 위한 방법도 있다. 하지만 필자는 값을 전달해주기 위해서 위 방법을 사용하였다.
728x90
반응형
LIST
'Solution > DB' 카테고리의 다른 글
[DB] Index 개념 정리 (0) | 2023.02.20 |
---|---|
[ORACLE] 딕셔너리 뷰 USER_TAB_MODIFICATIONS (0) | 2022.11.16 |
[SQL] INNER JOIN (내부조인), EQUI JOIN , NATURAL JOIN 란? 그리고 차이점은? (0) | 2022.02.23 |
[SQL] WHERE 절 <if> 와 <isNotEmpty> 차이 (0) | 2022.02.14 |
DECODE 함수 사용법 (0) | 2021.12.28 |