存储过程使用游标变量返回结果集
2013-01-26 23:22
225 查看
1)登录SQLPLUS,用户为SCOTT,利用该用户提供的表EMP
2)编写一个FUNCTION,返回值为游标变量
3)编写一个PLSQL块,调用上面的FUNCTION得到返回的游标变量
作者 陈字文(热衷于PM\ORACLE\J***A等,欢迎同行交流):ziwen#163.com 扣扣:4零9零2零1零零
4)几点说明:
①有三种语句可以控制游标变量的使用,分别是OPEN FOR、FETCH还有CLOSE。其中OPEN用于打开游标变量。FETCH用于将游标变量中的数据存放到变量当中存储。CLOSE用于在遍历完成之后,关闭游标。
②使用游标的时候,可以将REF CURSOR指定为强类型或者弱类型(在定义的后面增加RETURN ROWTYPE的方式),如果指定为强类型,小心避免出现类型不匹配的错误。
③游标变量可以在应用于数据库服务器之间进行传递,可以在数据库内部进行传递。应用或者数据库本身不具备单独的变量存储空间,其游标变量其实就是一个指向内存的指针,实质上这些数据是共享的。
④能够将游标的四个属性%FOUND,%NOTFOUND,%ISOPEN以及%ROWCOUNT应用到游标变量中,用于判断游标变量的状态。
⑤可以使用FETCH一次获取一条记录,也可以使用FETCH BULK COLLECT INTO 一次获取一条或者多条放到一个或者多个集合类型中。
⑥不要忘记关闭游标。
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;
作者 陈字文(热衷于PM\ORACLE\J***A等,欢迎同行交流):ziwen#163.com 扣扣:4零9零2零1零零
4)几点说明:
①有三种语句可以控制游标变量的使用,分别是OPEN FOR、FETCH还有CLOSE。其中OPEN用于打开游标变量。FETCH用于将游标变量中的数据存放到变量当中存储。CLOSE用于在遍历完成之后,关闭游标。
②使用游标的时候,可以将REF CURSOR指定为强类型或者弱类型(在定义的后面增加RETURN ROWTYPE的方式),如果指定为强类型,小心避免出现类型不匹配的错误。
③游标变量可以在应用于数据库服务器之间进行传递,可以在数据库内部进行传递。应用或者数据库本身不具备单独的变量存储空间,其游标变量其实就是一个指向内存的指针,实质上这些数据是共享的。
④能够将游标的四个属性%FOUND,%NOTFOUND,%ISOPEN以及%ROWCOUNT应用到游标变量中,用于判断游标变量的状态。
⑤可以使用FETCH一次获取一条记录,也可以使用FETCH BULK COLLECT INTO 一次获取一条或者多条放到一个或者多个集合类型中。
⑥不要忘记关闭游标。
相关文章推荐
- 存储过程调用存储过程,存储过程调用函数,返回表表变量,游标使用
- java调用存储过程(返回游标变量,利用索引表,临时表)
- 关于使用表接收存储过程返回结果集的问题
- 分享:在存储过程中使用另一个存储过程返回的查询结果集的方法
- mysql 存储过程中 limit之后使用分页变量,传入分页参数. 类似于微博游标分批次获取信息;问号参数类似于c#的string.format;问号占位符
- 对于存储过程中表名是变量的游标使用
- 在存储过程中如何使用另一个存储过程返回的结果集
- 在存储过程中如何使用另一个存储过程返回的结果集SQL实例
- 存储过程使用游标变量返回结果集(推荐)
- oracle存储过程中使用Ref Cursor强类型游标返回结果集
- 存储过程中如何使用另一个存储过程返回的结果集 网络转帖
- Oracle存储过程中执行查询返回的结果集,并使用java代码调用【转】
- 分享:在存储过程中使用另一个存储过程返回的查询结果集的方法
- php调用mysql存储过程返回结果集的处理
- Mysql存储过程优化——使用临时表代替游标
- oracle中存储过程调用存储过程(带有返回结果集)
- 存储过程中使用游标(在存储过程中遍历表)<sql>
- Matlab调用返回游标的存储过程的分析和处理
- Java调用oracle存储过程通过游标返回临时表数据
- SQL server 的存储过程返回结果集很简单