3) 명시적 커서 FOR LOOP
명시적 커서 FOR LOOP를 사용하면 FOR LOOP가 자동적으로 커서를 OPEN해주며, 행이 없을 때까지 FETCH해주고, CLOSE해준다. 또한 ROWTYPE에 해당하는 변수를 따로 DECLARE할 필요가 없다. 이는 암시적으로 선언되기 때문이다. 물론, 이 암시적 카운터는 FOR LOOP안에서만 사용할 수 있다. 그리고 이 커서의 데이터 타입(컬럼 데이터 타입의 집합)도 %ROWTYPE 앞으로 이용할 수 있다.
다음 예제는 명시적 커서를 FOR LOOP를 이용하여 구현한 예제이다.
DECLARE
CURSOR emp_cur
IS
SELECT * FROM emp WHERE deptno = 10 ;
BEGIN
FOR emp_rec IN emp_cur
LOOP
DBMS_OUTPUT.PUT_LINE ( emp_rec.empno || ' ' || emp_rec.ename ) ;
END LOOP ;
END ;
/
7782 CLARK
7839 KING
7934 MILLER
PL/SQL procedure successfully completed
이는 서브쿼리를 활용한 CURSOR FOR LOOP를 활용하면 CURSOR도 선언할 필요가 없어지게 된다.
BEGIN
FOR emp_rec IN
( SELECT * FROM emp WHERE deptno = 10
)
LOOP
DBMS_OUTPUT.PUT_LINE ( emp_rec.empno || ' ' || emp_rec.ename ) ;
END LOOP ;
END ;
/
7782 CLARK
7839 KING
7934 MILLER
PL/SQL procedure successfully completed.
CURSOR FOR LOOP은 내부적으로 처리되는 데이터의 양, I/O 측면에서 훨씬 효율적이기 때문에, 가급적 이를 사용하는 것이 좋다.
4) 명시적 커서 속성
명시적 커서 속성을 사용하여 커서에 대한 상태 정보를 획득할 수 있다. 다음 표는 명시적 커서 속성의 몇가지 예이다.
속성 |
설명 |
커서명%FOUND |
가장 최근 패치가 행을 반환하면 TRUE |
커서명%NOTFOUND |
가장 최근 패치가 행을 반환하지 않으면 TRUE |
커서명%ISOPEN |
커서가 열려 있으면 TRUE |
커서명%ROWCOUNT |
지금까지 반환된 총 행 수 |
'PL SQL' 카테고리의 다른 글
PL/SQL 예외 처리 (Exception Handling) - 3 (미리 정의되지 않은 에러) (0) | 2016.07.06 |
---|---|
PL/SQL 예외 처리 (Exception Handling) - 2 (미리 정의된 에러) (0) | 2016.07.06 |
PL/SQL 예외 처리 (Exception Handling) - 1 (예외 처리의 정의와 발생 상황, 유형) (0) | 2016.07.06 |
PL/SQL 명시적 커서, 암시적 커서 (Implicit Cursor, Explicit Cursor) - 1 (0) | 2016.07.06 |
PL/SQL Quiz1 대비 (0) | 2016.07.05 |