这是我曾经实验过的察看返回结果集的语句,完全正确CREATE OR REPLACE PACKAGE pkg_test AS TYPE cur is REF CURSOR; PROCEDURE pro_1(v_deptno NUMBER,c OUT cur); FUNCTION fun_1(v_deptno NUMBER) RETURN cur; END; /CREATE OR REPLACE PACKAGE BODY pkg_test AS PROCEDURE pro_1(v_deptno NUMBER,c OUT cur) AS v_name VARCHAR2(10); BEGIN OPEN c FOR SELECT ename FROM emp WHERE deptno = v_deptno; END;FUNCTION fun_1(v_deptno NUMBER) RETURN cur IS c_temp cur; BEGIN OPEN c_temp FOR SELECT ename FROM emp WHERE deptno = v_deptno; RETURN c_temp; END; END; /DECLARE p pkg_test.cur; v_ename varchar2(10); BEGIN p := pkg_test.fun_1(10); loop fetch p into v_ename; exit when p%notfound; dbms_output.put_line(v_ename); end loop; close p; END; /DECLARE p pkg_test.cur; v_ename varchar2(10); BEGIN pkg_test.pro_1(10,p); loop fetch p into v_ename; exit when p%notfound; dbms_output.put_line(v_ename); end loop; close p; END; /
TYPE cur is REF CURSOR;
PROCEDURE pro_1(v_deptno NUMBER,c OUT cur);
FUNCTION fun_1(v_deptno NUMBER) RETURN cur;
END;
/CREATE OR REPLACE PACKAGE BODY pkg_test AS
PROCEDURE pro_1(v_deptno NUMBER,c OUT cur) AS
v_name VARCHAR2(10);
BEGIN
OPEN c FOR SELECT ename FROM emp WHERE deptno = v_deptno;
END;FUNCTION fun_1(v_deptno NUMBER) RETURN cur IS
c_temp cur;
BEGIN
OPEN c_temp FOR SELECT ename FROM emp WHERE deptno = v_deptno;
RETURN c_temp;
END;
END;
/DECLARE
p pkg_test.cur;
v_ename varchar2(10);
BEGIN
p := pkg_test.fun_1(10);
loop
fetch p into v_ename;
exit when p%notfound;
dbms_output.put_line(v_ename);
end loop;
close p;
END;
/DECLARE
p pkg_test.cur;
v_ename varchar2(10);
BEGIN
pkg_test.pro_1(10,p);
loop
fetch p into v_ename;
exit when p%notfound;
dbms_output.put_line(v_ename);
end loop;
close p;
END;
/