본문 바로가기
DBMS/Oracle

[Oracle] 전년도 현재 년도에 복사, INSERT - SELECT문 , SELECT한 결과를 INSERT

by 성은2 2021. 5. 27.

<INSERT ~ SELECT 문>

INSERT INTO TRACK_MAS (CURR_YEAR, BS_POINT, BE_POINT, KS_POINT, KE_POINT, DS_POINT, DE_POINT
                       , DUPL_RATE, UDATE, UUSER)
-- 아래 SELECT구문을 INSERT하겠다
SELECT '2021' AS CURR_YEAR -- 하드코딩 값
     , BS_POINT
     , BE_POINT
     , KS_POINT
     , KE_POINT
     , DS_POINT
     , DE_POINT
     , DUPL_RATE
     , SYSDATE AS UDATE
     , 'se.shin' AS UUSER
 FROM TRACK_MAS
WHERE CURR_YEAR = '2020' -- 2020년도 데이터를 검색, CURR_YEAR를 2021로 변경해서 INSERT 하겠다.

 

...

 

 

작업을 하다가 다음 같은 상황이 생겼다.

 

'이전연도 데이터 복사하기'

 

사용자 입장에선 참 사용하기 편한 기능이다.

 

 

<로직>

1. CHECK : 작성중인 내용이 있으면 경고창 띄운후 YES / NO 선택

- 작성중인 내용이란? 현재 화면에 입력한 값이 있으면 작성중

 

2. DELETE : 복사하기 버튼을 누르면 현재 화면의 조건(ex_연도, 코드) 을 파라미터로 넘겨서 현재 저장된 값 전체 DELETE (*주의)

 

- myBatis

<delete id="delTrackMas" parameterType="com.test.copyTrack.vo.CopyTrackVO">
DELETE 
  FROM TRACK_MAS 
 WHERE CURR_YEAR = '${currYear}'
</delete>

 

3. INSERT : 선택한 전년도 데이터${copyYear}를 SELECT문으로 만들어서 -> 현재년도에 INSERT

 

- myBatis : ${} 파라미터 값을 넘겨 사용가능! 

<insert id="insTrackMas" parameterType="com.test.copyTrack.vo.CopyTrackVO" >
INSERT INTO TRACK_MAS
(CURR_YEAR, BS_POINT, BE_POINT, KS_POINT, KE_POINT, DS_POINT, DE_POINT, DUPL_RATE, UDATE, UUSER)
SELECT '${currYear}' AS CURR_YEAR
	 , BS_POINT
     , BE_POINT
     , KS_POINT
     , KE_POINT
     , DS_POINT
     , DE_POINT
     , DUPL_RATE
     , SYSDATE AS UDATE
     , '${uUser}' AS UUSER
  FROM TRACK_MAS
 WHERE CURR_YEAR = '${copyYear}'
</insert>

 

 

4. SELECT : 복사로직에서(ex_ajax) 미리 만들었던 화면 조회 하는 로직을 타게해서 화면이 전체 리로드 되며 복사한 내용이 세팅되게 작업