Oracle中返回结果集的存储过程分享_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;

时间: 2024-09-16 12:08:41

Oracle中返回结果集的存储过程分享_oracle的相关文章

EF如何执行oracle带返回结果集的存储过程?

问题描述 EF如何执行oracle带返回结果集的存储过程?如图..提示这个错误,请教大神,如何才能让EF执行Oracle的带返回结果的存储过程 解决方案 解决方案二:问题和这个人的一模一样..http://bbs.csdn.net/topics/390095809但是没有解决解决方案三: 解决方案四:这么简单的逻辑就不要用存储过程啦~接下来是个人猜想和排错思考1监控oracle是否接受到查询请求,sqlserver是可以检查别人发过来的查询语句的2看看查询语句是否正确3我觉得最大的返回的问题实体

oracle中rman备份集加密的方法

 下面我们来看看一个oracle中rman备份集加密的方法,希望这个例子能帮助到各位朋友了.   数据的安全越来越重要,不是说你的生产库安全,你的数据就一定安全了,rman备份也是泄露数据的一个重要地方,如果别人拿到了你的备份集,一样等同入侵了你的生产库.为了rman备份的安全,最简单方式就是使用set encryption方式在rman备份过程中设置密码,需要版本为10.2及其以后企业版版,另外如果需要备份到带库只能使用oracle自己的osb(Oracle Secure Backup),注意

带返回记录集的存储过程-ASP调用存储过程

存储过程|记录集 假设有以下存储过程(本文的目的不在于讲述T-SQL语法,所以存储过程只给出代码,不作说明): /*SP1*/CREATE PROCEDURE dbo.getUserListasset nocount onbeginselect * from dbo.[userinfo]endgo 以上存储过程取得userinfo表中的所有记录,返回一个记录集.通过command对象调用该存储过程的ASP代码如下: '**通过Command对象调用存储过程**DIM MyComm,MyRstSe

Oracle中生成自增序列-和存储过程

 oracle中没有自增列,这样的设定,必须手工写个方法 或用 序列 或用 触发器 还是用的序列方便(个人习惯) 1.create sequence salary_seq 2. 3.increment by 1 ---每次加几个 4. 5.start with 1 --从1开始计数 6. 7.nonmaxvalue --不设置最大值 8. 9.nocycle --一直累加,不循环 10. 11.cache 10 --有缓冲区 12. 13. 14. 15.eg create sequence s

oracle中lpad函数的用法详解_oracle

oracle中lpad的用法 pad翻译:填充 lpad函数,在字符串的左侧添加指定字符串,用法: www.jb51.net lpad(String ,截取长度,添加的字符串). 说是添加字符串也不准确,比较准确的说法是对String进行截取字符串, 如果截取长度大于String的长度,则在 String的左侧添加字符串进行填补,如果第三个参数未指定,则用空格进行填补. 例如: select lpad('test',10) from dual; 将返回" test" select lp

oracle中utl_file包读写文件操作实例学习_oracle

在oracle中utl_file包提供了一些操作文本文件的函数和过程,学习了一下他的基本操作 1.创建directory,并给用户授权 复制代码 代码如下: --创建directory create or replace directory TESTFILE as '/home/oracle/zxx/test'; --给用户授权 grant read, write on directory TESTFILE to zxx; 详细介绍 http://download.oracle.com/docs

oracle与mysql的视频教程下载地址分享_oracle

目录结构: 1_疯狂Java_疯狂软件_肖文吉老师_Oracle_Oracle服务器的安装 视频内容包括:Oracle10g服务器下载.安装.卸载以及要注意的事项等. 2_疯狂Java_疯狂软件_肖文吉老师_Oracle_Oracle远程连接 视频内容包括:Oracle数据库的用户登录和远程用户访问等. 3_疯狂Java_疯狂软件_肖文吉老师_Oracle_Oracle体系结构 视频内容包括:Oracle的体系结构,包括物理结构和逻辑结构详细说明等. 4_疯狂Java_疯狂软件_肖文吉老师_Or

Oracle对字段的增删改方法分享_oracle

Oracle是目前最流行的数据库之一,功能强大,性能卓越,相对的学习的难度还是不小.本文就是将自己的一些经验总结分享给大家,做个积累,方便自己和其他的学习者. 修改字段类型或者长度: alter table 表名 modify 字段名 字段类型 (字段长度) 例:  alter table table_name modify column_name varchar (10); 此为标准SQL,对任何数据库都适用  修改字段名: alter table 表名 rename column 旧字段名

Oracle中sys和system的区别小结_oracle

1. SYS用户具有DBA权限,并且拥有SYS模式,只能通过SYSDBA登陆数据库.是Oracle数据库中权限最高的帐号 SYSTEM具有DBA权限.但没有SYSDBA权限.平常一般用该帐号管理数据库就可以了. 2. (1)sys -- sysdba system --sysoper (2)startup/shutdown/dba管理两个都能做 (3)sys拥有数据字典(dictionay),或者说dictionay属于sys schema (4)sysdba比sysoper多了一个create