加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-12 15:29:38 所属栏目:百科 来源:网络整理
导读:/* 请使用scott/tiger用户下的emp表进行测试 */ /* 注意: 在使用游标作为返回值时,要注意再动态绑定时打开游标,然后返回。 在使用时直接使用游标,不需要再次打开,故而只能使用传统的open/close方式来使用游标, for循环使用游标时,会牵扯到打开游标,

/*
请使用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;

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读