Oracle中返回结果集的存储过程分享

所属分类: 数据库 / oracle 阅读数: 32
收藏 0 赞 0 分享
Oracle不像SQLServer那样在存储过程中用Select就可以返回结果集,而是通过Out型的参数进行结果集返回的。实际上是利用REF CURSOR
复制代码 代码如下:

--procedure返回记录集:
----------------------声明一个Package--------------
CREATE OR REPLACE PACKAGE pkg_test
AS
TYPEmyrctypeIS REF CURSOR;

PROCEDURE get_r(p_id NUMBER,p_rc OUT myrctype); --Package中声明名为get 的Procedure(只有接口没内容)
END pkg_test;

-----------------声明Package Body,即上面Package中的内容,包括Procedure get---------------------
CREATE OR REPLACE PACKAGE BODY pkg_test
AS
PROCEDURE get_r(p_id NUMBER,p_rc OUT myrctype)
IS
sqlstr VARCHAR2 (500);
BEGIN
IF p_id = 0 THEN
OPEN p_rc FOR
SELECT ID, NAME, sex, address, postcode, birthday
FROM student;
ELSE
sqlstr :=
'select id,name,sex,address,postcode,birthday
from student where id=:w_id'; --w_id是个参数,
--以下 p_rc是个REF CURSOR游标类型,而且是OUT型参数,即可返回一个记录集了。USING p_id就是替换上面SQL中:w_id值拉:)
OPEN p_rc FOR sqlstr USING p_id; 
END IF;
END get;
END pkg_test;

--function返回记录集的例子,原理和上面相同,而是用function的return值来返回记录集。

函数返回记录集:
建立带ref cursor定义的包和包体及函数:
复制代码 代码如下:

CREATE OR REPLACE
package pkg_test as

type myrctype is ref cursor;
function get_r(intID number) return myrctype;
end pkg_test;
/
CREATE OR REPLACE
package body pkg_test as
--函数体
function get_r(intID number) return myrctype is
rc myrctype; --定义ref cursor变量
sqlstr varchar2(500);
begin
if intID=0 then

--静态测试,直接用select语句直接返回结果
open rc for select id,name,sex,address,postcode,birthday from student;
else
--动态sql赋值,用:w_id来申明该变量从外部获得
sqlstr := 'select id,name,sex,address,postcode,birthday from student where id=:w_id';
--动态测试,用sqlstr字符串返回结果,用using关键词传递参数
open rc for sqlstr using intid;
end if;
return rc;
end get;
end pkg_test;
更多精彩内容其他人还在看

oracle中length、lengthb、substr、substrb函数用法介绍

这篇文章主要介绍了oracle中length、lengthb、substr、substrb函数用法的相关内容,具有一定参考价值,需要的朋友可以参考下。
收藏 0 赞 0 分享

浅谈oracle中单引号转义

这篇文章主要介绍了浅谈oracle中单引号转义的香瓜内容,涉及单引号的作用以及其具体用法,具有一定参考价值,需要的朋友可以参考下。
收藏 0 赞 0 分享

oracle逻辑结构分析

这篇文章主要介绍了oracle逻辑结构分析,逻辑清楚,具有一定参考价值,需要的朋友可以了解下。
收藏 0 赞 0 分享

oracle逻辑运算符与其优先级简介

这篇文章主要介绍了oracle逻辑运算符与其优先级的相关内容,涉及一些代码示例,具有一定参考价值。若有不当之处,欢迎指出。
收藏 0 赞 0 分享

浅谈oracle rac和分布式数据库的区别

这篇文章主要介绍了oracle rac和分布式数据库的区别的相关内容,小编觉得挺不错的,这里给大家分享下,需要的朋友可以参考。
收藏 0 赞 0 分享

Oracle存储过程和存储函数创建方法(详解)

下面小编就为大家带来一篇Oracle存储过程和存储函数创建方法(详解)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享

PL/SQL中编写Oracle数据库分页的存储过程

这篇文章主要介绍了 PL/SQL中编写Oracle数据库分页的存储过程,非常不错,具有参考借鉴价值,需要的朋友可以参考下
收藏 0 赞 0 分享

oracle表的简单操作步骤

这篇文章主要介绍了oracle表的简单操作步骤,需要的朋友可以参考下
收藏 0 赞 0 分享

Oracle自我补充之trunc()函数的使用方法

TRUNC函数为指定元素而截去的日期值。下面通过本文给大家介绍Oracle自我补充之trunc()函数的使用方法,感兴趣的朋友一起看看吧
收藏 0 赞 0 分享

Oracle 数据库忘记sys与system管理员密码重置操作方法

这篇文章主要介绍了Oracle 数据库忘记sys与system管理员密码重置操作,需要的朋友可以参考下
收藏 0 赞 0 分享
查看更多