/*
请使用scott/tiger用户下的emp表进行测试
*/
/*
注意:
在使用游标作为返回值时,要注意再动态绑定时打开游标,然后返回。
在使用时直接使用游标,不需要再次打开,故而只能使用传统的open/close方式来使用游标,
for循环使用游标时,会牵扯到打开游标,会出现重复打开的错误,所以不能使用。
*/
–在过程中返回类型为游标变量类型
CREATE OR REPLACE PROCEDURE findset_emp(v_deptno IN NUMBER,
c_cursor OUT SYS_REFCURSOR) AS
BEGIN
OPEN c_cursor FOR –打开游标,在创建过程中绑定
SELECT *
FROM emp
WHERE deptno = v_deptno;
END;
–测试过程返回游标类型是否正确
DECLARE v_cur SYS_REFCURSOR; emp_rec emp%ROWTYPE;
BEGIN
findset_emp(10,v_cur); LOOP FETCH v_cur INTO emp_rec; EXIT WHEN v_cur%NOTFOUND; dbms_output.put_line(‘—————’);
END LOOP; CLOSE v_cur;
END;
–创建函数,返回值为游标类型
CREATE OR REPLACE FUNCTION return_cur_test(v_deptno VARCHAR2) RETURN SYS_REFCURSOR IS
type_cur SYS_REFCURSOR;
BEGIN
OPEN type_cur FOR SELECT * FROM emp WHERE deptno = v_deptno; RETURN type_cur;
END;
–测试是否正确
DECLARE v_cur SYS_REFCURSOR; emp_rec emp%ROWTYPE;
BEGIN
v_cur := return_cur_test(&deptno);
LOOP EXIT WHEN v_cur%NOTFOUND; FETCH v_cur INTO emp_rec; dbms_output.put_line(‘—————’); END LOOP; CLOSE v_cur; END;