REFERENCE CURSOR의 예제를 살펴보자.
아래 프로시저와 함수는 테이블 명을 입력받아 결과를 REFERENCE CURSOR로 반환한다.
-- p1 CREATE OR REPLACE PROCEDURE p1 ( i_owner IN VARCHAR2 , i_table_name IN VARCHAR2 , o_result OUT SYS_REFCURSOR ) IS l_sql_text VARCHAR2 (32767); BEGIN l_sql_text := 'SELECT * FROM ' || i_owner || '.' || i_table_name; OPEN o_result FOR l_sql_text; END p1; / -- f1 CREATE OR REPLACE FUNCTION f1 ( i_owner IN VARCHAR2 , i_table_name IN VARCHAR2 ) RETURN SYS_REFCURSOR IS o_result SYS_REFCURSOR; l_sql_text VARCHAR2 (32767); BEGIN l_sql_text := 'SELECT * FROM ' || i_owner || '.' || i_table_name; OPEN o_result FOR l_sql_text; RETURN o_result; END f1; /
아래는 SQL*Plus에서 프로시저와 함수를 수행한 결과다.
VAR v_result REFCURSOR; -- p1 EXEC p1 ('SCOTT', 'DEPT', :v_result); PRINT :v_result; DEPTNO DNAME LOC ------ ---------- -------- 10 ACCOUNTING NEW YORK 20 RESEARCH DALLAS 30 SALES CHICAGO 40 OPERATIONS BOSTON 4 행이 선택되었습니다. -- f1 EXEC :v_result := f1 ('SCOTT', 'DEPT'); PRINT :v_result; DEPTNO DNAME LOC ------ ---------- -------- 10 ACCOUNTING NEW YORK 20 RESEARCH DALLAS 30 SALES CHICAGO 40 OPERATIONS BOSTON 4 행이 선택되었습니다.
'Oracle > PL/SQL' 카테고리의 다른 글
동적 순위 부여 (0) | 2014.04.23 |
---|---|
DBMS_UTILITY.EXPAND_SQL_TEXT 프로시저 (0) | 2014.04.19 |
한글 자소 분리 (0) | 2012.06.22 |
DBMS_UTILITY.FORMAT_ERROR_BACKTRACE 예제 (0) | 2012.05.11 |
LONG 타입을 VARCHAR2 타입으로 변환 (0) | 2012.05.10 |