oracle在一个存储过程中调用另一个返回游标的存储过程
2023-06-13 09:14:12 时间
第一种情况是返回的游标是某个具体的表或视图的数据,如:
SQL-Code:
复制代码代码如下:
SQL-Code:
CREATEORREPLACEPROCEDUREP_TESTA(
PRESULTOUTSYS_REFCURSOR
)
AS
BEGIN
OPENPRESULTFORSELECT*FROMUSERS;
ENDP_TESTA;
其中USERS就是数据库中一个表。在调用的时候只要声明一个该表的ROWTYPE类型就可以了:
SQL-Code:
CREATEORREPLACEPROCEDUREP_TESTB
AS
VARCURSORSYS_REFCURSOR;
RUSERS%ROWTYPE;
BEGIN
P_TESTA(VARCURSOR);
LOOP
FETCHVARCURSORINTOR;
EXITWHENVARCURSOR%NOTFOUND;
DBMS_OUTPUT.PUT_LINE(R.NAME);
ENDLOOP;
ENDP_TESTB;
第二种情况,我们返回的不是表的所有的列,或许只是其中一列或两列,如:
SQL-Code:
CREATEORREPLACEPROCEDUREP_TESTA(
PRESULTOUTSYS_REFCURSOR
)
AS
BEGIN
OPENPRESULTFORSELECTID,NAMEFROMUSERS;
ENDP_TESTA;
这里我们只返回了USERS表的ID,NAME这两个列,那么调用的时候也必须做相应的修改:
SQL-Code:
CREATEORREPLACEPROCEDUREP_TESTB
AS
VARCURSORSYS_REFCURSOR;
CURSORTMPCURSORISSELECTID,NAMEFROMUSERSWHEREROWNUM=1;
RTMPCURSOR%ROWTYPE;
BEGIN
P_TESTA(VARCURSOR);
LOOP
FETCHVARCURSORINTOR;
EXITWHENVARCURSOR%NOTFOUND;
DBMS_OUTPUT.PUT_LINE(R.ID);
ENDLOOP;
ENDP_TESTB;
与之前不同的是我们声明了一个游标类型的变量TMPCURSOR,注意TMPCURSOR的结构必须与存储过程P_TESTA返回的游标结构一致,否则就会出现错误。同理只要保持两个游标类型结构一致,就可以实现自由调用。
相关文章
- 编写Oracle存储过程:操作技巧总结(oracle编写存储过程)
- 解除Oracle注册表条目:一个步骤指南(oracle卸载注册表)
- 一步步构建Oracle数据库实例(新建一个oracle实例)
- 利用Oracle实现去除重复字段(oracle去重复字段)
- Oracle SQL中的全文索引实现(oracle全文索引)
- Oracle故障处理:从零开始(oracle故障案例)
- Oracle表空间:存储和管理数据的桶(什么是oracle表空间)
- 利用Oracle共享磁盘提高存储效率(oracle共享磁盘)
- Oracle存储过程中的运算技术研究(oracle存储过程运算)
- 利用Oracle触发器实现数据库自动化管理(oracle触发器类型)
- 下一个值获取 Oracle 序列下一个值(oracle取序列)
- Oracle存储过程:快速学习指南(oracle简单存储过程)
- Oracle存储过程编写指南(oracle存储过程写法)
- 一键清空:Oracle数据库中如何清空所有表?(oracle清空所有表)
- 信息Oracle内存中存储哪些信息(oracle内存存储哪些)
- C语言操作Oracle数据库的开发技巧(c 操作oracle开发)
- Oracle 分区空间调整解决存储问题(oracle修改分区空间)
- 从一个初学者到使用Oracle一个漫长的路程(oracle使用冒号)
- 在Oracle中如何建立一个表(oracle中建立一个表)
- Oracle数据库中单字段去重的方法(oracle一个字段去重)
- Oracle 页面让数据存储更简单(oracle pages)
- Oracle Lenth构建长久企业数据库支撑(oracle lenth)
- Oracle ELK技术数据采集存储与可视化之旅(oracle elk)
- Oracle CP命令帮助实现文件及目录的复制(oracle cp命令)
- Oracle 12c完全备份一个不可或缺的保障(oracle 12c全备)