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

SELECT DBMS_RANDOM.VALUE(1, 100) FROM DUAL


소수점이 나오므로 ROUND 함

SELECT ROUND(DBMS_RANDOM.VALUE(1, 100)) FROM DUAL



최저, 최고를 랜덤으로 뽑아서 섞어봄 // 별의미는 없어보임

SELECT ROUND(DBMS_RANDOM.VALUE(DBMS_RANDOM.VALUE(1, 100/2), DBMS_RANDOM.VALUE(100/2, 100))) rand FROM DUAL








'개발 > Oracle' 카테고리의 다른 글

Oracle Merge into (다중 Update, Insert)  (0) 2018.09.07

+ Recent posts