상세 컨텐츠

본문 제목

Oracle 의 MERGE INTO 예제 테이블 조건

DB/Oracle

by husks 2015. 3. 16. 21:13

본문

반응형


저는 일반적으로 키가 중복 될때 CNT값을 업데이트 해주는 용도로 많이 씁니다.

UPSERT라고 부르기도 합니다.

오라클 9이상 지원합니다.

아래 문법을 보시고 다양하게 사용 하시면 될 것 같습니다.

mysql은 http://huskdoll.tistory.com/17 여기를 참고하세요.


[문법]

1
2
3
4
5
6
7
8
MERGE INTO table_name alias                                     -- 테이블 명
          USING (table|view|subquery) alias                     -- 테이블, 뷰, 서브쿼리
          ON (join condition)                                   -- 조인조건
          WHEN MATCHED THEN                                     -- 일치하면 Update
                       UPDATE SET col1 = val1[, col2 = val2…]   -- Update문
          WHEN NOT MATCHED THEN                                 -- 불일치시 Insert
                       INSERT (column list) VALUES (values);    -- Insert문
 



[예제]

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
--첫번째 방법
MERGE INTO BOOKS
          USING DUAL
            ON (ID = 'A1')
          WHEN MATCHED
          THEN
            UPDATE
              SET
                CNT = CNT + 1
          WHEN NOT MATCHED
          THEN
            INSERT (
              ID,
              NAME,
              WRITER,
              PRICE,
              GENRE,
              PUBLISHER
            ) VALUES (
              'A1',
              '홍길동전',
              '허균',
              300,
              '소설',
              '허균 출판사'
            );
 
--두번째 방법
MERGE INTO TABLE_A A
          USING TABLE_B B
            ON (A.BOOK_ID = B.BOOK_ID)
          WHEN MATCHED
          THEN
            UPDATE
              SET
                PRICE = B.PRICE, --같은 북아이디가 있다면 가격을 업데이트한다.
                UPD_DT = SYSDATE,
                UPD_ID = 'husk'
          WHEN NOT MATCHED
          THEN
            INSERT ( --없다면 입력을 한다.
              BOOK_ID,
              PRICE,
              CRT_DT,
              CRT_ID
            ) VALUES (
              B.BOOK_ID,
              B.PRICE,
              SYSDATE,
              'husk'
            );



반응형

관련글 더보기

댓글 영역