服务器之家

服务器之家 > 正文

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

时间:2019-11-11 15:58     来源/作者:Oracle教程网

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; 

相关文章

热门资讯

玄元剑仙肉身有什么用 玄元剑仙肉身境界等级划分
玄元剑仙肉身有什么用 玄元剑仙肉身境界等级划分 2019-06-21
男生常说24816是什么意思?女生说13579是什么意思?
男生常说24816是什么意思?女生说13579是什么意思? 2019-09-17
华为nova5pro和p30pro哪个好 华为nova5pro和华为p30pro对比详情
华为nova5pro和p30pro哪个好 华为nova5pro和华为p30pro对比详情 2019-06-22
Nginx服务器究竟是怎么执行PHP项目
Nginx服务器究竟是怎么执行PHP项目 2019-05-24
配置IIS网站web服务器的安全策略配置解决方案
配置IIS网站web服务器的安全策略配置解决方案 2019-05-23
返回顶部