您的位置:首页 > 数据库 > Oracle

关于oracle中procedure和function返回cursor类型的变量

2017-01-05 14:18 681 查看
/*

请使用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;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: