Solution/DB

[SQL - ORACLE] selectKey?, 생성된 값 바로 사용하는 방법

JB1104 2022. 9. 22. 17:27
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