merge 문을 사용 할 때
on절에 온 Unique 컬럼을 update 인자로 쓸 수 없다.
하지만 그 unique 컬럼을 merge 문으로 사용하기 위해 아래와 같이
rowid 로 join을 걸어 해당 unique 컬럼을 update 로 사용 할 수 있다.
SELECT e.empno, e.ename
FROM emp e INNER JOIN dept d ON e.deptno = d.deptno
SELECT a.empno, a.ename
FROM emp a,
(SELECT b.*, aa.ROWID rid
FROM dept b, emp aa
WHERE b.deptno = aa.deptno(+)) c
WHERE a.ROWID = c.rid
아 참고로 Merge 문의 on 절에 오는 a.coulmn = b.column 들은
unique 값이 어야 한다.
unique 값이 아니라면 distinct 나 group by 하여 1:1 매칭이 되게 하여야 merge 문 에러가 나지 않는다.
'Database > SQL Tuning' 카테고리의 다른 글
[Oracle] Function 내부작동 및 Nasted Loops Join / Hash Join (0) | 2015.08.25 |
---|---|
Pipelined Table & Table Function (0) | 2015.08.25 |
Updatable join view / Merge / Instead of Trigger (0) | 2015.08.24 |
filter 방식 join 방식 / 스칼라 서브쿼리와 조인 (0) | 2015.08.21 |
[BVP] Bind Variable Peaking 과 Adaptive Cursor Sharing (0) | 2015.08.20 |