저는 전에 데이터를 SELECT해와서 데이터가 0개면 INSERT하고, 있는 놈이면 해당 값을 업데이트 하는 식으로 했었는데요. 우연히 MERGE INTO라는 것을 알게 되었네요.

ORACLE에서만 되는 듯 하네요-_-; 9i이상에서만 된다고 하네요.

MERGE INTO의 목적은 어떤 테이블이나 뷰테이블을 해당 목표테이블과 합체(MERGE)하기 위한 목적인데요. 이걸 이용해서 데이터가 들어왔을 때 있는 데이터면 UPDATE하고, 없는 데이터면 INSERT하는 형태로도 쓰일 수 있습니다.

http://radiocom.kunsan.ac.kr/lecture/oracle/sql/merge.html
위에는 MERGE INTO를 잘 설명한 사이트네요.

여기서 조금 응용하면 원하는 대로 구현할 수 있습니다-_-;

MERGE INTO 테이블명  별칭
USING 대상테이블/뷰  별칭
ON 조인조건
WHEN MATCHED THEN
  UPDATE SET
   컬럼1=값1
   컬럼2=값2
WHEN NOT MATCHED THEN
  INSERT (컬럼1,컬럼2,...)
       VALUES(값1,값2,...);

MERGE INTO다음에 나오는 테이블명은 실제로 데이터가 들어가거나 업데이트 되는 테이블이구요.
USING 다음에 나오는 테이블명은 실제 데이터를 가져오거나 할 테이블이구요.
ON은 WHERE과 같은 조건문이죠.
WHEN MATCHED THEN은 매치되는게 있으면 UPDATE하라는 얘기구요.
WHEN NOT MATCHED THEN은 매치되는게 없으면 INSERT하게 되죠.

응용해봅시다.
[code]
           MERGE INTO INSERTTABLE
           USING DUAL
           ON (ID = 1)
           WHEN MATCHED THEN
           UPDATE SET
           DATA = 'idoori'
           WHEN NOT MATCHED THEN
           INSERT (ID, DATA)
           VALUES (1, 'mudchobo')
[/code]
INSERTTABLE이라는 곳에 USING은 DUAL이라고 했는데 DUAL은 dual은 1개의 레코드 만을 갖는 dummy 테이블이라고 합니다. select 1 from dual해버리면, 1이 나오죠. 대상테이블은 필요없으니 dual로 설정합니다.
ON에서 ID = 1은 ID가 1인게 만약 있으면, DATA부분을 idoori로 업데이트하고, 없으면 mudchobo로 넣게 되는겁니다.

아놔 별거 없는데 막 늘어썼네-_-;
 
Posted by 머드초보

댓글을 달아 주세요

  1. 머드님처럼... 2009.09.01 17:18  댓글주소  수정/삭제  댓글쓰기

    검색하다가 들렸는데요.좋은자료가 상당히 많군요!!
    앞으로 많이 퍼가서 공부하겟습니다.
    지금 교육받고 입사한지 얼마안되는데..기초가 없으면 모든지 힘들더군요.ㅜㅜ

    • 머드초보 2009.09.09 17:41  댓글주소  수정/삭제

      안녕하세요!
      교육도 받으시는 회사라니! 좋은 회사군요!
      전 가자마자 코딩을.....ㅠㅠ
      방문해주셔서 감사해요~ ^^

  2. nona* 2011.03.30 09:40  댓글주소  수정/삭제  댓글쓰기

    좋은 정보 감사합니다. ^^
    많은 도움이 됐습니다.

  3. hyapy 2013.04.03 10:14  댓글주소  수정/삭제  댓글쓰기

    좋은글 감사합니다. 덕분에 많은 도움 얻었어요 ^^

  4. onandme 2014.06.26 16:41  댓글주소  수정/삭제  댓글쓰기

    정보 잘보고 갑니다. 비공개로 담아갈게요.