2015년 9월 3일 목요일

오라클 묵시적 커서(IMPLICIT CURSOR)

오라클 묵시적 커서(IMPLICIT CURSOR)

 SQL문이 실행 될 때 오라클 서버에 의해 자동으로 생성되는 커서로 자동으로 Closing 된다.
 INSERT, UPDATE, DELETE가 실행될 때도 묵시적 커서가 생성되는데 INSERT인 경우 커서는 INSERT되는 데이터를 가리키며 UPDATE, DELETE가 실행되는 경우 커서는 DML에 의해 영향을 받는 레코드를 가리킨다.
 가장 최근에 만들어진 묵시적 커서에 대한 속성을 제공한다.

Attribute Description
%FOUND SELECT, INSERT, UPDATE, DELETE에 의해 영향을 받은 레코드가 한건 이상이면 TRUE, 아니면 FALSE를 리턴.
%NOTFOUND %FOUND의 반대, SELECT, INSERT, UPDATE, DELETE에 의해 영향을 받은 레코드가 한건도 없으면 TRUE, 아니면 FALSE를 리턴.
%ISOPEN 항상 FALSE, 묵시적 커서는 오라클 서버가 항상 사용 후 Closing.
%ROWCOUNT SELECT, INSERT, UPDATE, DELETE에 의해 영향을 받은 레코드 건수를 리턴.

SQL> select ename, sal from emp where deptno = 10;

ENAME            SAL
---------- ----------
CLARK            2450
KING            5000
MILLER          1300

-- EMP 테이블에서 10번 부서 사원들의 급여를 5% 인상 하시오.
SQL> SET SERVEROUTPUT ON
SQL> DECLARE
  total_rows number(2);
BEGIN
  UPDATE emp
  SET sal = sal + round(sal * 5 / 100)
  WHERE deptno = 10;
 
  IF sql%notfound THEN
      dbms_output.put_line('no emp selected');
  ELSIF sql%found THEN
      total_rows := sql%rowcount;
      dbms_output.put_line( total_rows || ' emps selected ');
  END IF;
 
  commit;  --커밋해버리면 커서의 속성을 알수 없으니 뒤쪽에서 Commit
END;
/
3 emps selected

PL/SQL 처리가 정상적으로 완료되었습니다.

SQL> select ename, sal from emp where deptno = 10;

ENAME            SAL
---------- ----------
CLARK            2573
KING            5250
MILLER          1365

댓글 없음:

댓글 쓰기