[인터돌™] 공부 해보자!! 열심히~~~

반응형
제목 쓸려니 참 어렵구나 -_-;;

하고 싶은건, 여러 테이블을 조인하거나 하는 등으로 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)



이 글을 공유합시다

facebook twitter googleplus kakaoTalk kakaostory naver band