6.2.5 The WHERE CURRENT OF Clause

출처 http://www.gurubee.net/lecture/1068

WHERE CURRENT OF

  ROWID를 이용하지 않고도 현재 참조하는 행을 갱신하고 삭제할 수 있게 한다.

  추가적으로 FETCH문에 의해 가장 최근에 처리된 행을 참조하기 위해서 “WHERE CURRENT OF 커서이름 ” 절로 DELETE나 UPDATE문 작성이 가능하다.

  이 절을 사용할 때 참조하는 커서가 있어야 하며, FOR UPDATE절이 커서 선언 query문장 안에 있어야 한다. 그렇지 않으면 에러가 발생한다.

WHERE CURRENT OF 예제

 
-- DBMS_OUTPUT.PUT_LINE을 출력하기 위해 사용
SQL> SET SERVEROUTPUT ON;  

SQL> CREATE OR REPLACE PROCEDURE where_current 
     IS

        CURSOR emp_list IS 
             SELECT empno 
             FROM emp 
             WHERE empno = 7934 
             FOR UPDATE; 

     BEGIN 

        --DBMS_OUTPUT.PUT_LINE명령을 사용하기 위해서 
        DBMS_OUTPUT.ENABLE;    

        FOR emplst IN emp_list LOOP
         
           --emp_list커서에 해당하는 사람의 직업을  SALESMAN으로 업데이트 시킵니다.
           UPDATE emp 
           SET job = 'SALESMAN' 
           WHERE CURRENT OF emp_list; 

           DBMS_OUTPUT.PUT_LINE('수정 성공');

        END LOOP; 
  
        EXCEPTION
           WHEN OTHERS THEN 
           -- 에러 발생시 에러 메시지 출력
           DBMS_OUTPUT.PUT_LINE('ERR MESSAGE : ' || SQLERRM); 
    END;  
    /

--먼저 데이터를 확인해 보자
SQL> SELECT job FROM emp WHERE empno = 7934;

JOB
---------
CLERK

 --PLSQL을 실행시키고..
SQL> EXECUTE where_current;
수정 성공 

-- 데이터를 확인하면 변경된 것을 확인 할 수 있다. 
SQL> SELECT job FROM emp WHERE empno = 7934;
 
JOB
---------
SALESMAN
    

답글 남기기 0

Your email address will not be published. Required fields are marked *