더북(TheBook)

Knowhow | UPDATE문? MERGE문?

오라클의 UPDATE문은 사용하기 수월치 않은 것이 사실이다. 특히 연관성 있는 서브 쿼리로 특정 컬럼을 갱신할 때, SET 절과 WHERE 절에서 서브 쿼리를 사용해야 한다. 즉 아래와 같은 형태로는 사용할 수 없다.

    UPDATE Job_history
       SET department_id = b.department_id
      FROM Job_history a,
           employeesb
     WHERE a.employee_id = b.employee_id;

이 쿼리의 원래 용도는 job_history의 부서번호를 사원 테이블에 있는 부서번호로 갱신하는 것이다. 이런 유형을 조인 UPDATE라고도 하는데, 오라클에서는 이런 유형을 지원하지 않는다. 따라서 다른 테이블과 조인을 해서 특정 조건을 걸어 UPDATE를 하면 오라클에서는 코드도 길어지고 매우 불편한 것이 사실이다. 그래서 많은 경우 현장에서는 UPDATE 대신 MERGE문을 사용하고 있다. 물론 UPDATE와 MERGE문 중 어떤 것을 사용할 것인지는 선택의 몫이지만, 필자는 간단한 UPDATE를 제외하고 연관성 있는 서브 쿼리를 이용할 때는 대부분 MERGE문을 사용하고 있다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.