[ORACLE] MERGE INTO

2013. 3. 8. 11:39·Database
반응형

-- MERGE UPDATE
MERGE INTO IFT_FUND_STANDARD_PRICE_RESULT A
USING (
    SELECT TIMS_DATE,FUND_CODE,BM_INDEX,BM_RATE FROM IFT_FUND_STANDARD_PRICE_RESULT
    WHERE FUND_CODE ='10110'
    AND TIMS_DATE > '20130115'
) B
ON (
    A.TIMS_DATE = B.TIMS_DATE
    AND A.FUND_CODE ='10112'
)
WHEN MATCHED THEN
    UPDATE SET A.BM_INDEX = B.BM_INDEX, A.BM_RATE = B.BM_RATE

=============================================================================================

MERGE INTO를 사용하면 INSERT, UPDATE를 각 케이스 별로 처리할 수 있다.

한꺼번에 데이터를 덮어쓰거나 갱신할때 UPDATE와 INSERT가 동시에 처리되어야 할때가 있는데,

그러한 경우에 유용하게 쓸수 있는 구문이다.


MERGE INTO 대상테이블 A

USING (

) B

ON (

-- 매칭 조건

)

WHEN MATCHED THEN

-- 조건에 매칭될 경우 실행

UPDATE 문 (UPDATE SET ...)

WHEN NOT MATCHED THEN

-- 조건에 매칭되지 않을 경우 실행

INSERT 문 (특이한 점은 INSERT INTO가 아니다.)


예제

MERGE INTO TCOGRNTNUM A

USING (

    SELECT '0009' AS GTNO_KD_CD, GTNO_KEY_VAL, MAX(POL_SEQ) AS SEQ

    FROM (

        SELECT PDGP_CD || SUBSTR(TO_CHAR(INS_BGN_DT, 'YYYYMMDD'), 3,2) AS GTNO_KEY_VAL, SUBSTR(POL_NO, 6, 7) POL_SEQ FROM TCTTCOT

        WHERE

            BIZ_SYS_CD = 'CTK'

            AND JNT_TNG_YN = '2'

            AND INS_BGN_DT BETWEEN TO_DATE('20121001', 'YYYYMMDD') AND TO_DATE('20121115', 'YYYYMMDD')

    )

    GROUP BY GTNO_KEY_VAL

) B

ON (

    A.GTNO_KD_CD = B.GTNO_KD_CD

    AND A.GTNO_KEY_VAL = B.GTNO_KEY_VAL

)

WHEN MATCHED THEN

    UPDATE SET A.SEQ = B.SEQ, A.SYS_DEL_DIV_CD = '0', A.INPPE_ORG_ID = '0000000000', A.SYS_OCC_DTM = SYSDATE,

    A.OCC_IP = '0.0.0.0', A.APP_ID = 'MIG', A.DATA_CHNG_DTM = SYSDATE

WHEN NOT MATCHED THEN

    INSERT (A.GTNO_KD_CD, A.GTNO_KEY_VAL, A.SEQ, A.SYS_DEL_DIV_CD, A.INPPE_ORG_ID, A.SYS_OCC_DTM, A.OCC_IP, A.APP_ID, A.DATA_CHNG_DTM)

    VALUES (B.GTNO_KD_CD, B.GTNO_KEY_VAL, B.SEQ, '0', '0000000000', SYSDATE, '0.0.0.0', 'MIG', SYSDATE) 

;


출처 - http://elaia.tistory.com/112 

반응형

'Database' 카테고리의 다른 글

[ORACLE]OUT JOIN  (0) 2013.06.14
[ORACLE]LONG 데이터타입 -> VARCHAR2 데이터로 변환  (0) 2013.06.07
[ORACLE] 바이트수 확인  (0) 2013.03.07
[ORACLE]Oracle Default Profile 확인  (0) 2013.02.21
[ORACLE]주민번호로 태어난 연도 알아내기  (0) 2013.01.18
'Database' 카테고리의 다른 글
  • [ORACLE]OUT JOIN
  • [ORACLE]LONG 데이터타입 -> VARCHAR2 데이터로 변환
  • [ORACLE] 바이트수 확인
  • [ORACLE]Oracle Default Profile 확인
애플자라
애플자라
    반응형
  • 애플자라
    애플자라
    애플자라
  • 전체
    오늘
    어제
    • 분류 전체보기 (655)
      • Linux (93)
      • Programing (92)
      • Flex, Laszlo (15)
      • Database (168)
      • Network (15)
      • Data (14)
      • Tips (119)
      • 여행★ (1)
      • Board (115)
      • 맛집탐방 (3)
      • 아이원츄 (12)
  • 블로그 메뉴

    • 홈
    • 태그
    • 미디어로그
    • 위치로그
    • 방명록
  • 링크

    • Love&Smile
    • Husk's repository
    • StartUp
    • DSDSTUDIO Experimentals
    • 신선
    • DEV.SEULKI.KR[이슬기]
    • Live Bit Block
  • 공지사항

  • 인기 글

  • 태그

    서버
    테이블
    Shell
    MySQL
    java
    sql
    eclipse
    데이터
    IP
    tomcat
    Toad
    리눅스
    mssql
    table
    윈도우
    server
    오라클
    Windows
    DB
    Oracle
    백업
    자동차
    delete
    파일
    DATABASE
    select
    설정
    apache
    Linux
    user
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
애플자라
[ORACLE] MERGE INTO
상단으로

티스토리툴바