CURSOR FOR LOOP는 Explicit CURSOR안에 있는 모든 Row들을
처리한다.[오라클PLSQL커서란, 커서종류] 오라클자바커뮤니티 SQL강좌교육
따라서 CURSOR의 FETCH문에서 모든 데이터를 처리하기 위해 %NOTFOUND속성을 이용해야 하는 경우에 사용하면 유용하다.
이 CURSOR는 내부적으로 OPEN되고, FETCH되고 나서 루프를 나가면 CLOSE되기 때문에 DECLARE절에서 선언만 하고 사용하면 된다.
또한 CURSOR
의 데이터를 읽어 올 변수를 선언할 필요가 없다.
FOR record명 IN cursor명 LOOP
문장1;
문장2;
...
END LOOP;
CREATE OR REPLACE PROCEDURE show_emp
IS CURSOR empcursor IS
SELECT name, salary
FROM s_emp ;
BEGIN
DBMS_OUTPUT.PUT_LINE('이 름 '||' 급 여 '||' 직 책 ');
DBMS_OUTPUT.PUT_LINE('--------------------');
FOR emprecord IN empcursor LOOP
DBMS_OUTPUT.PUT_LINE(emp_record.name||'
'||emp_record.salary) ;
END LOOP;
/*emp_cursor%ROWCOUNT; CURSOR FOR LOOP는 END LOOP로
CLOSE되므로
처리 불가능*/
END ;
/
따라서 CURSOR의 FETCH문에서 모든 데이터를 처리하기 위해 %NOTFOUND속성을 이용해야 하는 경우에 사용하면 유용하다.
이 CURSOR는 내부적으로 OPEN되고, FETCH되고 나서 루프를 나가면 CLOSE되기 때문에 DECLARE절에서 선언만 하고 사용하면 된다.
또한 CURSOR
의 데이터를 읽어 올 변수를 선언할 필요가 없다.
FOR record명 IN cursor명 LOOP
문장1;
문장2;
...
END LOOP;
CREATE OR REPLACE PROCEDURE show_emp
IS CURSOR empcursor IS
SELECT name, salary
FROM s_emp ;
BEGIN
DBMS_OUTPUT.PUT_LINE('이 름 '||' 급 여 '||' 직 책 ');
DBMS_OUTPUT.PUT_LINE('--------------------');
FOR emprecord IN empcursor LOOP
DBMS_OUTPUT.PUT_LINE(emp_record.name||'
'||emp_record.salary) ;
END LOOP;
/*emp_cursor%ROWCOUNT; CURSOR FOR LOOP는 END LOOP로
CLOSE되므로
처리 불가능*/
END ;
/
댓글 없음:
댓글 쓰기