Oracle의 MERGE INTO 기초

Database를 Oracle를 사용할때 유용하게 사용하는 Merge Into에 대해서 간단하게 정리.

개인적으로 실서비스에서는 크게 사용한적은 없는 것 같고 Admin이나 배치 개발시에 MyBatis와 함께 유용하게 사용하고 있다.

요구사항 : 상품이 있으면 수정하고 없으면 삽입해라.

기존 Update와 Insert 만 사용예시

mybatis를 사용한다고 했을때 가장 간단하게 처리하는 방법은 아래와 같다.

  1. 우선 Update query를 실행한 후 update 된 행의 개수를 resultType으로 return

  2. Insert into query실행.(위 update의 update rows가 0인 경우에만 실행.)

Update Query 예시.


UPDATE PRODUCT pd
SET USE_YN = #{useYn}
,PRODUCT_NAME = #{productName}
,MODIFY_DATE = SYSDATE
   WHERE pd.PRODUCT_ID = #{productId}

Insert Query 예시.

INSERT INTO PRODUCT (
    PRODUCT_ID
    , PRODUCT_NAME
    , USE_YN
    , MODIFY_DATE
  ) values (
    #{productId}
    , #{productName}
    , #{useYn}
    , SYSDATE
  )

Merge into 사용하기(Update 와 Insert 합치기.)

위 요구사항을 Merge Into를 이용하여 구현하면 아래와 같다.

기본적인 사용법은 너무 간단해서 따로 추가 내용은 필요가 없을 정도이다.

레퍼런스 사이트에 가면 좀 더 디테일 하게 내용을 확인 할 수 있다.

Merge into Query with comment

많이 사용하는 구성은 의외로 간단하다. 다만 생각해야 할 것은 Update 또는 Insert를 한번에 처리하므로 Parameter값을 잘 생각해서 주어야 한다.

MERGE INTO Product pd /* 대상이 되는 테이블 또는 뷰*/
USING DUAL /* 위의 하나의 테이블만 이용할려면 DUAL을 적으면 됨.*/
ON ( pd.PRODUCT_ID = #{productId} ) /* ON 에 해당되는 데이타가 UPDATE시 Rows가 됨. */
WHEN MATCHED THEN /* ON 조건에 해당되는 것이 있으면 아래 실행(UPDATE) */
UPDATE SET       /* Update시 테이블명이나 Where조건이 모두 위에 있다고 생각하면 됨 */
USE_YN = #{useYn}
,PRODUCT_NAME = #{productName}
,MODIFY_DATE = SYSDATE
WHEN NOT MATCHED THEN /* ON 조건에 매칭되지 않으면 아래 실행(Insert)*/
INSERT ( /* INSERT INTO PRODUCT -> INSERT로 퉁쳤다는걸 기억하다. */
    PRODUCT_ID
    , PRODUCT_NAME
    , USE_YN
    , MODIFY_DATE
  ) values (
    #{productId}
    , #{productName}
    , #{useYn}
    , SYSDATE
  )

Merge into Query without comment


MERGE INTO Product pd
USING DUAL
ON ( pd.PRODUCT_ID = #{productId} )
WHEN MATCHED THEN
UPDATE SET
USE_YN = #{useYn}
,PRODUCT_NAME = #{productName}
,MODIFY_DATE = SYSDATE
WHEN NOT MATCHED THEN
INSERT (
    PRODUCT_ID
    , PRODUCT_NAME
    , USE_YN
    , MODIFY_DATE
  ) values (
    #{productId}
    , #{productName}
    , #{useYn}
    , SYSDATE
  )

Syntax diagram

아래는 Oracle 내 레퍼런스 사이트내 Merge Into에 대한 syntax diagram이다.

https://docs.oracle.com/cd/B28359_01/server.111/b28286/statements_9016.htm#SQLRF01606



merge_update_caluse 구문



merge_insert_clause 구문

'Database' 카테고리의 다른 글

java.sql.SQLSyntaxErrorException: ORA-00911: 문자가 부적합합니다  (0) 2017.12.22
Mysql 사용자 팁  (0) 2014.12.02
Posted by 다인,보리아빠
,

오랜만에 와이프와 영화를 무료로 보기 위해서 노력해 얻은 정보를 정리합니다.

준비 및 자격 사항

  • T멤버십 VIP여야 되는 것 같음.(와이프는 VIP가 아니여서 예매를 못함.)

  • SK패밀리카드가 있어야함.(T 멤버십 더블 롯데 신용카드도 가능)

특이사항

  • T멤버십 VIP의 무료영화를 다 써야지만 추가적으로 쓸수 있음.

  • 아마도 한달에 무조건 한명밖에 안되는 것 같음.

  • 내 SKT맴버십외 다른 사람의 것을 넣어서 한번에 2장 무료영화를 신청할 수 있을지 시도가 필요함.단 두명모두 VIP여야함.

결론

결론은 무조건 한달에 한번만 예매할 수 있는 것으로 확인됨.

카드를 등록하여 무료영화를 년 12회 볼수 있더라도 최대 18회까지 볼수도 있을 것 같으나

영화는 무조건 한달에 1매밖에 예매를 못하는 것 같음.

머 이런...

어쨌든 카드 등록 방법 및 사용법 안내드림.

패밀리카드 등록하여 예매방법

URL : http://tmembership.tworld.co.kr/web/html/vip_lounge/vip_3d_movie.jsp?sel=5

1. URL로 이동.


2. 영화 고르기.


3. 무료예매화면 제일 하단에 T멤버십카드 추가등록.


4. T멤버십 제휴 하나카드 등록(여러카드등록하면 무료예매혜택이 늘어남. 12장 이상되면 어찌되는진 모르겠음)


5. 카드정보 등록 및 요청. Validation check후 저장됨.


6. 이전 예매페이지로 이동하면 등록한 제휴카드가 나옴.


Posted by 다인,보리아빠
,

지난주에는 만화방에서 신과함께 만화를

이번주에는 극장에서 영화를 보고나서의 감상평.

우선 영화볼때 Tip.

  • 영화 보러 갈때는 휴지 챙겨가세요.(신파극)

  • 음료수 필수(목이메임)

  • 다시 한번 이야기하지만 엔딩크레딧 전에 쿠키영상이 다임.


영화평

개인적으로 점수는 별3.5개쯤. 우선 내용은 만화에서 내용을 끌어가던 엘리트 진기한 변호사 가 나오지 않아서

조금 이상하긴 했지만 엘리트 진기한 변호사가 나오면 신파인 영화에

어울리지 않았을지도 모르겠다.

사실 만화에서는 그리 신파가 없다.

주인공내용도 다르고

등장 인물과 연계 등등 많은 차이가 있음.

조금 무미건조 할 수 있는 만화에 스토리를 엮기 위해서 각색된 부분들이 많이 있다.

사실 만화를 보고 영화를 바로 보니 이해가 감.

그래서 안 슬플줄 알았는데....

스포일러는 없다.

다시 한번 착하게 살아야겠다는 생각을 하게됨.

와이프평

이정재 잘생긴줄 몰랐는데 잘생겼네.

후속편

2편이 함께 제작되었고 내년(2018년) 8월 1일 개봉예정이고

1, 2편을 함께 촬영하였다고 한다.

그래서 제작비도 많이 아꼈다고 한다.

아마도 만화책에서 나오고 영화에서 스포 및 쿠키영상으로 나오는 그 할아버지의 집과

그 집에 사는 가택신들이 후속편의 내용일 것으로 예상된다.

만화에 나오는 가택신

가택신이 자리를 비우면 비운자리에는 항상 문제가 생긴다고 함. 가세가 기운다고 함.....

  • 성주신(아마도 마동석) : 집을 다스리는 신.

  • 조왕 : 살림살이를 하는 부엌신으로 부녀자들의 신이라고 함.

  • 측신 : 화장실을 관장하는 신.똥신?

  • 철융신 : 장독간을 지키는 신으로 만화에서는 장맛을 책임진다.


이건 사진찍어온 것.


Posted by 다인,보리아빠
,