Oracle 서버에서 할당한 전용 메모리 영역에 대한 포인터
오라클이나 PL/SQL 실행 메커니즘에 의해 처리되는 SQL 문의 결과에 대한 익명의 주소
SQL%FOUND
SQL%NOTFOUND
SQL%ISOOPEN
SQL%ROWCOUNT
SET SERVEROUTPUT ON;
/
BEGIN
DELETE FROM EMPLOYEE
WHERE DEPT_NO = 10;
DBMS_OUTPUT.PUT_LINE('처리 건수: ' || TO_CHAR(SQL%ROWCOUNT) || '건')
END;
/
/* 결과
처리 건수: NN건
PL/SQL 처리가 정상적으로 완료되었습니다.
*/
SET SERVEROUTPUT ON;
프로그래머에 의해 선언되고 이름을 가진 커서
CURSOR_NAME%FOUND
CURSOR_NAME%NOTFOUND
CURSOR_NAME%ISOOPEN
CURSOR_NAME%ROWCOUNT
DECLARE
CURSOR CURSOR_NAME IS SELECT문;
BEGIN
OPEN CURSOR_NAME;
FETCH CURSOR_NAME INTO VARIABLE1, VARIABLE2, ..;
CLOSE CURSOR_NAME;
END;
DECLARE
OPEN
FETCH
CLOSE
SET SERVEROUTPUT ON;
DECLARE
CURSOR EMPLOYEE_CURSOR
IS
SELECT * FROM EMPLOYEE WHERE DEPT_NOT = 10;
V_EMPLOYEE EMPLOYEE%ROWTYPE; -- 변수
BEGIN
OPEN EMPLOYEE_CURSOR;
LOOP
FETCH EMPLOYEE_CURSOR INTO V_EMPLOYEE; -- 하나씩 변수에 넣기
EXIT WHEN EMPLOYEE_CURSOR%NOTFOUND; -- 더 이상 없으면 끝
DBMS_OUTPUT.PUT_LINE(V_EMPLOYEE.EMPLOYEE_NO || ' ' || V_EMPLOYEE.NAME);
END LOOP;
CLOSE EMPLOYEE_CURSOR;
END;
SET SERVEROUTPUT ON;
DECLARE
ID_LIST SYS_REFCURSOR; -- 커서 정의
I_ID VARCHAR2(100); -- 변수
BEGIN
OPEN ID_LIST;
FOR
SELECT USER_ID FROM USERS WHERE condition;
LOOP
FETCH ID_LIST INTO I_ID;
EXIT WHEN ID_LIST%NOTFOUND;
DBMS_OUTPUT.PUT_LINE(I_ID);
END LOOP;
CLOSE ID_LIST;
END;
SET SERVEROUTPUT ON;
DECLARE
CURSOR ID_LIST
IS
SELECT 'JM' AS USER_ID FROM DUAL;
BEGIN
FOR
TEST_CURSOR IN ID_LIST
LOOP
DBMS_OUTPUT.PUT_LINE(TEST_CURSOR.USER_ID);
END LOOP;
END;
-- 예시 3번을 명시적 커서 FOR LOOP 방식으로 변경
SET SERVEROUTPUT ON;
BEGIN
FOR ID_LIST IN
(SELECT 'JM' AS USER_ID FROM DUAL)
LOOP
DBMS_OUTPUT.PUT_LINE(ID_LIST.USER_ID);
END LOOP;
END;