참고 : http://blog.kjslab.com/20
1. 커서의 내용을 미리 정의 해 놓고 사용하는 방법
DECLARE
CURSOR C1 IS SELECT TABLE_NAME , TABLESPACE_NAME , STATUS , PCT_FREE FROM USER_TABLES;
BEGIN
FOR R IN C1 LOOP DBMS_OUTPUT.PUT_LINE('TABLE NAME : ' || R.TABLE_NAME || ', TABLESPACE NAME : ' || R.TABLESPACE_NAME); END LOOP;END; / |
-- ROW 단위로 변수 정의
DECLARE R USER_TABLES%ROWTYPE; C1 SYS_REFCURSOR;
BEGIN OPEN C1 FOR SELECT * FROM USER_TABLES;
LOOP FETCH C1 INTO R; EXIT WHEN C1%NOTFOUND; DBMS_OUTPUT.PUT_LINE('TABLE NAME : ' || R.TABLE_NAME); END LOOP; CLOSE C1;
END; / |
-- ROW 단위로 변수 정의 후 COLUMN 단위로 사용
DECLARE R USER_TABLES%ROWTYPE; C1 SYS_REFCURSOR;
BEGIN OPEN C1 FOR SELECT TABLE_NAME , TABLESPACE_NAME FROM USER_TABLES;
LOOP FETCH C1 INTO R.TABLE_NAME, R.TABLESPACE_NAME; EXIT WHEN C1%NOTFOUND; DBMS_OUTPUT.PUT_LINE('TABLE NAME : ' || R.TABLE_NAME || ', TABLESPACE NAME : ' || R.TABLESPACE_NAME); END LOOP; CLOSE C1;
END; / |
-- COLUMN 단위로 변수 정의
DECLARE TABLE_NAME USER_TABLES.TABLE_NAME%TYPE; C1 SYS_REFCURSOR; BEGIN OPEN C1 FOR SELECT TABLE_NAME FROM USER_TABLES;
LOOP FETCH C1 INTO TABLE_NAME; EXIT WHEN C1%NOTFOUND; DBMS_OUTPUT.PUT_LINE('TABLE NAME : ' || TABLE_NAME); END LOOP; CLOSE C1;
END; / |
-- TYPE 정의
DECLARE TYPE V_TYPE IS RECORD (TABLE_NAME USER_TABLES.TABLE_NAME%TYPE, TABLESPACE_NAME USER_TABLES.TABLESPACE_NAME%TYPE); R V_TYPE; C1 SYS_REFCURSOR;
BEGIN OPEN C1 FOR SELECT TABLE_NAME , TABLESPACE_NAME FROM USER_TABLES;
LOOP FETCH C1 INTO R; EXIT WHEN C1%NOTFOUND; DBMS_OUTPUT.PUT_LINE('TABLE NAME : ' || R.TABLE_NAME || ', TABLESPACE NAME : ' || R.TABLESPACE_NAME); END LOOP;
CLOSE C1;
END; / |
2. 커서 변수를 미리 만들어 놓고 불러서 사용하는 방법
DECLARE R USER_TABLES%ROWTYPE; C1 SYS_REFCURSOR;
BEGIN OPEN C1 FOR SELECT * FROM USER_TABLES;
LOOP FETCH C1 INTO R; EXIT WHEN C1%NOTFOUND; DBMS_OUTPUT.PUT_LINE('TABLE NAME : ' || R.TABLE_NAME || ', TABLESPACE NAME : ' || R.TABLESPACE_NAME); END LOOP;
CLOSE C1; END; / |
3. 동적으로 커서를 생성해서 사용하는 방법
BEGIN FOR C1 IN ( SELECT TABLE_NAME , TABLESPACE_NAME FROM USER_TABLES ) LOOP DBMS_OUTPUT.PUT_LINE('TABLE NAME : ' || C1.TABLE_NAME || ', TABLESPACE NAME : ' || C1.TABLESPACE_NAME); END LOOP; END; / |