【转载】存储过程使用游标变量返回结果集

原帖地址https://blog.csdn.net/ziwen00/article/details/8545637 学习备忘
1)登录SQLPLUS,用户为SCOTT,利用该用户提供的表EMP

C:\Users\Administrator>sqlplus scott/scott

2)编写一个FUNCTION,返回值为游标变量

CREATE OR REPLACE FUNCTION GETEMPCURSOR(PRM_CHOICE IN NUMBER)
RETURN  SYS_REFCURSOR
IS
  EMPCURSOR SYS_REFCURSOR;
BEGIN
  IF PRM_CHOICE = 1 THEN
    OPEN EMPCURSOR FOR SELECT * FROM EMP WHERE DEPTNO = 10;
  ELSIF   PRM_CHOICE =2 THEN
    OPEN EMPCURSOR FOR SELECT * FROM EMP WHERE DEPTNO = 20;
  ELSIF  PRM_CHOICE =3 THEN
    OPEN EMPCURSOR FOR SELECT * FROM EMP WHERE DEPTNO = 30;
  ELSE
    OPEN EMPCURSOR FOR SELECT * FROM EMP;
  END IF;
  RETURN EMPCURSOR;
  END;

3)编写一个PLSQL块,调用上面的FUNCTION得到返回的游标变量

DECLARE
EMPCURSOR SYS_REFCURSOR;
REC_EMP EMP%ROWTYPE;
BEGIN
EMPCURSOR := GETEMPCURSOR(10);
IF EMPCURSOR%ISOPEN THEN
  LOOP
      FETCH EMPCURSOR INTO REC_EMP;
      EXIT WHEN EMPCURSOR%NOTFOUND;
      DBMS_OUTPUT.PUT_LINE(''||'==>'||REC_EMP.ENAME);
  END LOOP;
END IF;
CLOSE EMPCURSOR;
END;

4)几点说明:

①有三种语句可以控制游标变量的使用,分别是OPEN FOR、FETCH还有CLOSE。其中OPEN用于打开游标变量。FETCH用于将游标变量中的数据存放到变量当中存储。CLOSE用于在遍历完成之后,关闭游标。
②使用游标的时候,可以将REF CURSOR指定为强类型或者弱类型(在定义的后面增加RETURN ROWTYPE的方式),如果指定为强类型,小心避免出现类型不匹配的错误。
③游标变量可以在应用于数据库服务器之间进行传递,可以在数据库内部进行传递。应用或者数据库本身不具备单独的变量存储空间,其游标变量其实就是一个指向内存的指针,实质上这些数据是共享的。
④能够将游标的四个属性%FOUND,%NOTFOUND,%ISOPEN以及%ROWCOUNT应用到游标变量中,用于判断游标变量的状态。
⑤可以使用FETCH一次获取一条记录,也可以使用FETCH BULK COLLECT INTO 一次获取一条或者多条放到一个或者多个集合类型中。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值