[Oracle9i] Update구문의 Returning Clause

Oracle 2011. 2. 18. 10:31
Oracle9iR2 Documents에서 SQL Reference 문서를 찾은 후, UPDATE 구문에 대한 설명을

확인해보시면, Update 구문이 아래와 같은 구조를 같는다고 설명이 되어 있습니다.

오른쪽 하단에 보시면 Returning_Clause라고 존재하죠.


Text description of statements_1026.gif follows

하지만, 실제로는 많이 사용되지도 않을 뿐더러, 각 교육기관을 통해서 배울 때, 대부분 알고 있듯이

UPDATE table_name SET update_contents WHERE where_clause;

로만 보아왔고, 사용하셨을 것입니다.

Returning_Clause를 잘 사용하면 도움이 될 수 있으니 일단 알고 넘어가도록 하겠습니다.

      UPDATE employees
            SET job_id ='SA_MAN', salary = salary + 1000, department_id = 140
       WHERE last_name = 'Jones'
 RETURNING salary*0.25, last_name, department_id
           INTO :bnd1, :bnd2, :bnd3;

위의 SQL문을 확인해보면 아래와 같습니다.

last_name이 'Jones'인 사람을 찾아서 jod_id와 salary, department_id 값을 변경해주고,

bnd1, bnd2, bnd3의 변수에 salary*0.25, last_name, department_id 값을 Return 하도록 작성된

것입니다.

흔히 이와 같은 형태를 구현할 때, 아래와 같이 2개의 SQL문을 작성하여 처리하는 경우가 많습니다.

      UPDATE employees
            SET job_id ='SA_MAN', salary = salary + 1000, department_id = 140
       WHERE last_name = 'Jones';

      SELECT salary*0.25, last_name, department_id
           INTO :bnd1, :bnd2, :bnd
         FROM employees
       WHERE last_name = 'Jones'; 


하지만, 동일한 Table에 2번을 접근해야 한다는 점에서 비효율적이죠.

이럴 때, 앞서 제시한 예제 구문처럼 Returning Clause를 이용한다면 보다 효율적으로 작업을 진행할

수 있을듯 합니다.

단, 아래와 같은 경우에는 Returning Clause를 사용할 수 없으니 숙지하시기 바랍니다.

(생각해보면 당연하게 받아 들여질 수 있는 내용입니다.)

  • Specify the returning_clause for a multitable insert.
  • Use this clause with parallel DML or with remote objects.
  • Retrieve LONG types with this clause.
  • Specify this clause for a view on which an INSTEAD OF trigger has been defined.
 
:     

TISTORY에 Login하려면 여기를 누르세요.