300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > Oracle块编程返回结果集详解

Oracle块编程返回结果集详解

时间:2021-06-01 16:04:53

相关推荐

Oracle块编程返回结果集详解

数据库|mysql教程

Oracle结果集,Oracle块编程返回结果集详解,数据库

数据库-mysql教程

办公oa 源码 下载,ubuntu如何裁剪小点,用tomcat7好还是9好,python爬虫p站,php开发学习难点在哪里交流,阳江seo培训lzw

在Oracle块编程(begin系列)中,由于其不支持select …. from …返回结果集的形式,因此就只能通过输出参数的形式返回结果。游

菜单页面源码下载,vscode自动补齐快捷,进ubuntu花屏,tomcat装在哪了,htmlunit 爬虫,斐波那契数列php,锦州seo优化策划费用,hr网站源码,小说网页代码模板lzw

php充值网页源码,vscode C智能提示,ubuntu 双拼 编码,tomcat系统日志开启,sqlite3+网络数据库,java爬虫被反爬虫,php.ini 目录,国内seo推广哪家好,web简历网站效果,动态分页模板lzw

A、概述

在Oracle块编程(begin系列)中,由于其不支持select …. from …返回结果集的形式,因此就只能通过输出参数的形式返回结果。游标作为一种将结果集封装成以指针单调向下读取数据的结构,类似于只有出队并删除操作的队列,正好作为输出参数的类型。而为了使用这种方式,必须保证存储过程的参数在声明与调用时的统一,因此不得不使用程序包。所以程序包+游标+存储过程或函数就成了块编程返回结果集的方法。下面来谈pl/sql与实现的方法。

B、定义

1、表结构

create table Grade

(

GradeId,number,

GradeName varchar2(20)

)

2、块编程

–定义程序包规范

create package Grades is

type Result is ref cursor;

procedure FenYe_Grade(p_PageSize in number,p_PageIndex in number,p_Result out Result);

end Grades;

–定义程序包体

create package body Grades is

procedure FenYe_Grade(p_PageSize in number,p_PageIndex in number,p_Result out Result) is

begin

open p_Result for select GradeId,GradeName

from (select GradeId,GradeName,rownum rn from Grade where rownum<=p_Page*p_PageSize) a

where rn>p_PageSize*(p_Page-1);

end FenYe_

既然谈到了rownum,那就来详细说说,rownum是读取数据时的顺序号,记得”读取数据时的顺序号”,任何读取都算。就好像把所有数据放入 一个房间,门口有一个涂编号的机器(起始号为1,递增量为1),房间里出来一个,该机器就在它身上涂上一个数字,机器涂号不能被打断,一被打断,,又从1开始。因为它一被打断就从1开始,所以rownum>n或rownum=n (n>1)总是为false的,根据这个比喻,用rownum>2来说:首先第一个出来为1,不满足筛选条件,抛弃掉,此时涂号器被打断,从1开始,于是第二个又是1,如此循环下去,所有的数都是1.再拿上面代码实例“where rn>p_pageSize*(p_Page-1)”来说,讨论其一种情况:

a、改为”where rownum>p_pageSize*(p_Page-1)”

这样改后,结果一定是空的,为什么呢?用rownum判断就意味着又要对a结果集重新编号了,根据上面的推论,结果一定是空的。那用rn为什么又可以呢?rn是a结果集rownum的别名,当把rownum用别名输出后,就等于rownum物化了,已经作为结果集的一列,因此用rn判断时就不要重新编号了

更多详情见请继续阅读下一页的精彩内容:

相关阅读:

Oralce中返回结果集的存储过程ref cursor

JDBC 调用Oracle存储过程返回结果集并获得输出参数

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。