제목 쓸려니 참 어렵구나 -_-;;
하고 싶은건, 여러 테이블을 조인하거나 하는 등으로 select를 했다고 가정할 경우 이 때 하나의 컬럼에 다른 컬럼의 내용을 그대로 업데이트 하고 싶은거다. 아마도 A라는 테이블과 B라는 테이블에서 값을 가져왔다면 값은 B 테이블에 있고 업데이트할 대상은 A 테이블의 어느 컬럼이 되겠지?
아래와 같이 하면 된다. 오라클 에러가 날 경우가 있는데 이 때 /*+ bypass_ujvc+*/ 와 같은 힌트를 주면 된다.
update /*+ bypass_ujvc */
(
select u.userid, u.name as u_name, m.cn as m_name from user u, people m
where u.userid = m.userid
)
set u_name = m_name;
DBA의 이야기로는 위와같은 쿼리는 대용량 업데이트 시에 쓰이는거라고 하는데 아는게 저거뿐이라;;;; 아래와 같이 해도 결과는 동일하다.
update user a set name =
(
select cn
from people b
where b.userid = a.userid
);
update /*+ bypass_ujvc */ 를 쓸 때 뒤에 + 가 붙어있으면 안된다고 한다;;
update /*+ bypass_ujvc + */ 와 같이 쓰면 잘못이라는 뜻. 위에 예문은 고쳐놨음 (2011/06/07)