MS SQL 에서는 UPDATE를 JOIN 으로 할 수 있는데, 오라클에서는 /*+ BYPASS_UJVC */ 힌트를 를 붙이거나 MERGE INTO 를 써야함
바이패스 힌트의 경우 11g 부터 문제가 발생하며, 오라클 공식으로는 MERGE INTO 를 쓰라고 나온 상태임
MERGE INTO는 9i 부터 지원된다고 함
--예제
MERGE INTO UPDATED_TABLE A
USING DATA_TABLE B
ON (
A.KEY = B.KEY
)
WHEN MATCHED THEN /* 매치되면? */
UPDATE SET
A.DATA1 = B.DATA1
WHEN NOT MATCHED THEN /* 매치안되면? */
INSERT (KEY, DATA1)
VALUES (B.KEY, B.DATA1)
매치 부분은 필요한 것 만 쓰면 됨
USING 쪽은 SUB QUERY 도 가능
--예제
MERGE INTO UPDATED_TABLE A
USING (
SELECT *
FROM DATA_TABLE B
) B
ON (
A.KEY = B.KEY
)
WHEN MATCHED THEN /* 매치되면? */
UPDATE SET
A.DATA1 = B.DATA1
WHEN NOT MATCHED THEN /* 매치안되면? */
INSERT (KEY, DATA1)
VALUES (B.KEY, B.DATA1)
※ ON 쪽에 괄호 () 는 필수 임
'개발 > Oracle' 카테고리의 다른 글
Oracle 랜덤 함수 (0) | 2018.09.07 |
---|