[Oracle9i] Update구문의 Returning Clause
Oracle 2011. 2. 18. 10:31Oracle9iR2 Documents에서 SQL Reference 문서를 찾은 후, UPDATE 구문에 대한 설명을
확인해보시면, Update 구문이 아래와 같은 구조를 같는다고 설명이 되어 있습니다.
오른쪽 하단에 보시면 Returning_Clause라고 존재하죠.

하지만, 실제로는 많이 사용되지도 않을 뿐더러, 각 교육기관을 통해서 배울 때, 대부분 알고 있듯이
UPDATE table_name SET update_contents WHERE where_clause;
로만 보아왔고, 사용하셨을 것입니다.
Returning_Clause를 잘 사용하면 도움이 될 수 있으니 일단 알고 넘어가도록 하겠습니다.
위의 SQL문을 확인해보면 아래와 같습니다.
last_name이 'Jones'인 사람을 찾아서 jod_id와 salary, department_id 값을 변경해주고,
bnd1, bnd2, bnd3의 변수에 salary*0.25, last_name, department_id 값을 Return 하도록 작성된
것입니다.
흔히 이와 같은 형태를 구현할 때, 아래와 같이 2개의 SQL문을 작성하여 처리하는 경우가 많습니다.
하지만, 동일한 Table에 2번을 접근해야 한다는 점에서 비효율적이죠.
이럴 때, 앞서 제시한 예제 구문처럼 Returning Clause를 이용한다면 보다 효율적으로 작업을 진행할
수 있을듯 합니다.
단, 아래와 같은 경우에는 Returning Clause를 사용할 수 없으니 숙지하시기 바랍니다.
(생각해보면 당연하게 받아 들여질 수 있는 내용입니다.)
확인해보시면, Update 구문이 아래와 같은 구조를 같는다고 설명이 되어 있습니다.
오른쪽 하단에 보시면 Returning_Clause라고 존재하죠.

하지만, 실제로는 많이 사용되지도 않을 뿐더러, 각 교육기관을 통해서 배울 때, 대부분 알고 있듯이
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;
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';
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.
'Oracle' 카테고리의 다른 글
[Oracle Dictionary] PL/SQL과 Table간의 Dependency 정보 확인 (0) | 2011.02.22 |
---|---|
Oracle REF CURSOR (0) | 2011.02.18 |
DB Link를 이용한 Query에서 실행계획이 Poor Plan이 되는 문제 (0) | 2010.12.15 |
[ORA-28002] 사용자 계정의 암호가 만기될 것입니다. (0) | 2010.09.29 |
TEXT INDEX의 META DATA를 CTXSYS USER에서 삭제하는 방법 (0) | 2010.09.22 |