教育房产时事环球科技商业
投稿投诉
商业财经
热点动态
科技数码
软件应用
国际环球
晨报科学
新闻时事
信息智能
汽车房产
办公手机
教育体育
生活生物

oracle分页(一文看懂Oracle分页实现方案的三种方式)

  oracle分页(一文看懂Oracle分页实现方案的三种方式)Oracle分页实现
  闲来无事,整理下Oracle、mysql、mssql以及PG数据库的分页实现方式,大家可以简单做个对比,看下不同数据库在分页这块是怎么实现的。今天先介绍一下Oracle分页的实现方式。
  oracle的分页一共有三种方式,但在Oracle中实现分页的方法主要是用ROWNUM关键字和用ROWID关键字两种。Rownum 和 Rowid是Oracle数据库所特有的,通过他们可以查询到指定行数范围内的数据记录。1、根据rowid来分
  Oracle使用rowid数据类型存储行地址,rowid是物理存在的,实际存在的一个列,是一种数据类型。 基于64为编码的18个字符来唯一标识的一条记录的物理位置的一个ID。而唯一标识出对应的存储的物理位置, 类似hashcode值。
  rowid可以分成两种,分别适于不同的对象:1)Physicalrowids:存储ordinarytable,clusteredtable,tablepartitionandsubpartition,indexe,indexpartitionandsubpartition2)Logicalrowids:存储IOT的行地址
  另一种rowid类型叫universal rowed(UROWID),支持上述physical rowid和logical rowed,并且支持非oracle table, 即支持所有类型的rowid, 但COMPATIBLE必须在8.1或以上.
  每个表在oracle内部都有一个ROWID伪列,它在所有sql中无法显示,不占存储空间; 它用于从表中查询行的地址或者在where中进行参照,rowid伪列不存储在数据库中,它不是数据库数据,这是从database及table的逻辑结构来说的,事实上,在物理结构上,每行由一个或多个row pieces组成,每个row piece的头部包含了这个piece的address,即rowid.从这个意义上来说,rowid还是占了磁盘空间的。
  我们在创建表时,可以为列指定为rowid数据类型,但oracle并不保证列中的数据是合法的rowid值,必须由应用程序来保证, 另外,类型为rowid的列需要6 bytes存储数据
  一般实现分页的过程如下:
  1)获取数据物理地址:SELECT ROWID RID, tablenumber FROM table_name ORDER BY tablenumber DESC
  2)取得最大页数:SELECT ROWNUM RN, RID FROM (SELECT ROWID RID, tablenumber FROM table_name ORDER BY tablenumber DESC) WHERE ROWNUM <= xx
  3)取得最小页数:SELECT RID FROM(SELECT ROWNUM RN, RID FROM (SELECT ROWID RID, tablenumber FROM table_name ORDER BY tablenumber DESC) WHERE ROWNUM <= xx)
  4)因为取得的页数都是物理地址,再根据物理地址,查询出具体数据--currentPage:当前页数--pageSize:每页显示几条SELECT*FROMtable_nameWHEREROWIDIN  (SELECTRIDFROM(SELECTROWNUMRN,RIDFROM(SELECTROWIDRID,tablenumberFROMtable_nameORDERBYtablenumberDESC)WHEREROWNUM<=((currentPage-1)*pageSize+pageSize))  WHERERN>((currentPage-1)*pageSize))  ORDERBYtablenumberDESC;
  2、按分析函数 ROW_NUMBER() OVER()来分
  语法格式:row_number() over(partition by 分组列 order by 排序列 desc)
  oracle中的ROW_NUMBER() OVER(partition by col1 order by col2) 表示根据col1分组,在分组内部根据col2排序,而此函数计算的值就表示每组内部排序后的顺序编号(组内是连续且唯一的)
  一般实现分页的过程如下:--currentPage:当前页数--pageSize:每页显示几条SELECT*FROM(SELECTT.*,ROW_NUMBER()OVER(ORDERBYtablenumberDESC)RKFROMtT)WHERERK<=((currentPage-1)*pageSize+pageSize)  ANDRK>((currentPage-1)*pageSize);
  3、根据rownum 来分
  rownum是伪列,是在获取查询结果集后再加上去的 (获取一条记录加一个rownum)。对符合条件的结果添加一个从1开始的序列号
  对于rownum来说它是oracle系统顺序分配为从查询返回的行的编号,返回的第一行分配的是1,第二行是2,依此类推,这个伪字段可以用于限制查询返回的总行数,且rownum不能以任何表的名称作为前缀。
  一般实现分页的过程如下:--currentPage:当前页数--pageSize:每页显示几条SELECT*FROM(SELECTT.*,ROWNUMRNFROM(SELECT*FROMtORDERBYtablenumberDESC)TWHEREROWNUM<=((currentPage-1)*pageSize+pageSize))WHERERN>((currentPage-1)*pageSize);
  4、存储过程实现
  这个存储过程主要是让大家看看分页的实现过程,可忽略--1、开发一个包,在该包中,定义类型test_cursor,是个游标createorreplacepackagetestpackageastypetest_cursorisrefcursor;endtestpackage;--2、开始编写分页的过程createorreplaceprocedurefenye(tableNameinvarchar2,--表名  pageSizeinnumber,--一页显示记录数  pageNowinnumber,--当前页  myrowsoutnumber,--总记录数  myPageCountoutnumber,--总页数  p_cursorouttestpackage.test_cursor--返回的记录集  )is--定义部分  --定义sql语句字符串  v_sqlvarchar2(1000);--定义两个整数  v_beginnumber:=(pageNow-1)*pageSize+1;  v_endnumber:=pageNow*pageSize;  begin--执行部份  v_sql:='select*from(selectt1.*,rownumrnfrom(select*from'||  tableName||')t1whererownum<='||v_end||')wherern>='||  v_begin;--把游标和sql关联  openp_cursorforv_sql;--计算myrows和myPageCount  --组织一个sql  v_sql:='selectcount(*)from'||tableName;--执行sql,并把返回的值赋给myrows;  executeimmediatev_sql  intomyrows;--计算myPageCount  ifmod(myrows,PageSize)=0then  myPageCount:=myrows/PageSize;else  myPageCount:=myrows/PageSize+1;endif;--关闭游标  closep_cursor;end;
  5、实例演示
  5.1、环境准备createtablet(EMPNONUMBER(4)notnull,  ENAMEVARCHAR2(10),  JOBVARCHAR2(9),  MGRNUMBER(4),  HIREDATEDATE,  SALNUMBER(7,2),  COMMNUMBER(7,2),  DEPTNONUMBER(2));altertabletaddconstraintPK_EMPprimarykey(EMPNO)usingindex;INSERTINTOtVALUES('7369','SMITH','CLERK','7902',TO_DATE('1980-12-1700:00:00','SYYYY-MM-DDHH24:MI:SS'),'800',NULL,'20');INSERTINTOtVALUES('7499','ALLEN','SALESMAN','7698',TO_DATE('1981-02-2000:00:00','SYYYY-MM-DDHH24:MI:SS'),'1600','300','30');INSERTINTOtVALUES('7521','WARD','SALESMAN','7698',TO_DATE('1981-02-2200:00:00','SYYYY-MM-DDHH24:MI:SS'),'1250','500','30');INSERTINTOtVALUES('7566','JONES','MANAGER','7839',TO_DATE('1981-04-0200:00:00','SYYYY-MM-DDHH24:MI:SS'),'2975',NULL,'20');INSERTINTOtVALUES('7654','MARTIN','SALESMAN','7698',TO_DATE('1981-09-2800:00:00','SYYYY-MM-DDHH24:MI:SS'),'1250','1400','30');INSERTINTOtVALUES('7698','BLAKE','MANAGER','7839',TO_DATE('1981-05-0100:00:00','SYYYY-MM-DDHH24:MI:SS'),'2850',NULL,'30');INSERTINTOtVALUES('7782','CLARK','MANAGER','7839',TO_DATE('1981-06-0900:00:00','SYYYY-MM-DDHH24:MI:SS'),'2450',NULL,'10');INSERTINTOtVALUES('7788','SCOTT','ANALYST','7566',TO_DATE('1987-04-1900:00:00','SYYYY-MM-DDHH24:MI:SS'),'3000',NULL,'20');INSERTINTOtVALUES('7839','KING','PRESIDENT',NULL,TO_DATE('1981-11-1700:00:00','SYYYY-MM-DDHH24:MI:SS'),'5000',NULL,'10');INSERTINTOtVALUES('7844','TURNER','SALESMAN','7698',TO_DATE('1981-09-0800:00:00','SYYYY-MM-DDHH24:MI:SS'),'1500','0','30');INSERTINTOtVALUES('7876','ADAMS','CLERK','7788',TO_DATE('1987-05-2300:00:00','SYYYY-MM-DDHH24:MI:SS'),'1100',NULL,'20');INSERTINTOtVALUES('7900','JAMES','CLERK','7698',TO_DATE('1981-12-0300:00:00','SYYYY-MM-DDHH24:MI:SS'),'950',NULL,'30');INSERTINTOtVALUES('7902','FORD','ANALYST','7566',TO_DATE('1981-12-0300:00:00','SYYYY-MM-DDHH24:MI:SS'),'3000',NULL,'20');INSERTINTOtVALUES('7934','MILLER','CLERK','7782',TO_DATE('1982-01-2300:00:00','SYYYY-MM-DDHH24:MI:SS'),'1300',NULL,'10');commit;
  5.2、根据rowid查询--查询当前第一页,并显示5行数据(currentPage=1,pagesize=5)SELECT*FROMtWHEREROWIDIN  (SELECTRIDFROM(SELECTROWNUMRN,RIDFROM(SELECTROWIDRID,EMPNOFROMtORDERBYEMPNODESC)WHEREROWNUM<=((1-1)*5+5))--每页显示几条  WHERERN>((1-1)*5))--当前页数  ORDERBYEMPNODESC;  --查询当前第二页,并显示6行数据(currentPage=2,pagesize=6)SELECT*FROMtWHEREROWIDIN  (SELECTRIDFROM(SELECTROWNUMRN,RIDFROM(SELECTROWIDRID,EMPNOFROMtORDERBYEMPNODESC)WHEREROWNUM<=((2-1)*6+6))--每页显示几条  WHERERN>((2-1)*6))--当前页数  ORDERBYEMPNODESC;
  5.3、根据分页函数查询--查询当前第一页,并显示6行数据(currentPage=1,pagesize=6)SELECT*FROM(SELECTT.*,ROW_NUMBER()OVER(ORDERBYtablenumberDESC)RKFROMtT)WHERERK<=((1-1)*5+5)--每页显示几条  ANDRK>((1-1)*5);--当前页数
  5.4、根据分页函数查询--查询当前第二页,并显示4行数据(currentPage=2,pagesize=4)SELECT*FROM(SELECTT.*,ROWNUMRNFROM(SELECT*FROMtORDERBYempnoDESC)TWHEREROWNUM<=((2-1)*4+4))WHERERN>((2-1)*4);
  觉得有用的朋友多帮忙转发哦!后面会分享更多devops和DBA方面的内容,感兴趣的朋友可以关注下~

海尔洗衣机售后服务(海尔洗衣机售后服务怎么样)海尔洗衣机售后服务(海尔洗衣机售后服务怎么样)一台洗衣机可能使用好几年才更换,在使用的过程中也许会遇到些问题,比如洗衣机损坏了而需要维修的情况,在这时候就需要品牌的售后服务,海尔洗大宝的防晒霜怎么样(大宝防晒霜怎么样)大宝的防晒霜怎么样(大宝防晒霜怎么样)OnlyLady女人志20150129000000大宝防晒霜怎么样之防晒指数美丽也是需要智慧的,若想肌肤白皙免受阳光的折磨,避免遭受晒伤晒黑的防晒喷雾(热门防晒喷雾深度测评!)防晒喷雾(热门防晒喷雾深度测评!)只做最真实的美妆测评欢迎关注真实美妆又到了开始使用防晒喷雾的季节,今天就给大家测评几款网上最热门的防晒喷雾。不吹不黑,绝对真实测评。高姿防晒喷雾这美素奶粉产地(美素奶粉被曝掺假)美素奶粉产地(美素奶粉被曝掺假)毒奶粉再现美素奶粉被曝掺假或危及生命央视曝过期奶粉灌出美素丽儿,5000万元奶粉被查封专家称奶粉混装危及孩子生命质监部门介入调查,案件移送公安机关洋手机上网怎么设置(手机上网流量设置在哪里找到?)手机上网怎么设置(手机上网流量设置在哪里找到?)手机上网流量设置功能,通过设置App即可找到!以系统版本为EMUI9。1的华为手机为例,进入流量设置功能的详细操作方法如下1通过桌面华为上网卡(华为随行WiFi3天际通流量卡)华为上网卡(华为随行WiFi3天际通流量卡)2021年6月29日,华为天际通正式推出天际通流量卡,该流量卡与华为随行WiFi3搭配使用,可为消费者带来最优的国内出行高速上网解决方案湖北林业(湖北8个林业碳汇项目年均减排76。8万吨)湖北林业(湖北8个林业碳汇项目年均减排76。8万吨)湖北省目前已开发中国核证自愿减排(CCER)林业碳汇项目8个,共计94。36万亩,预计年均减排76。8万吨。湖北省森林面积1。1龙骨一根(连第一根龙骨都没铺设)龙骨一根(连第一根龙骨都没铺设)7月26日,乌克兰驻伊斯坦布尔总领事亚历山大阿曼发表声明称我们与土耳其方面就阿达级护卫舰签署了框架协议,目前开工准备工作正在进行中。这份声明一出,引美容祛斑(堪比磨皮的祛斑方法一定要知道)美容祛斑(堪比磨皮的祛斑方法一定要知道)小时候父母告诉我,天使吻过我的脸,留下一些俏皮的痕迹。所以,就算外婆总说我脸没洗干净,我的童年依然快乐可是长大后,过了走可爱路线的年纪,雀斑西安利之星(后果很严重!西安利之星被停业)西安利之星(后果很严重!西安利之星被停业)来源每日经济新闻资料图,图片来源每经记者张建不相信上帝的眼泪,后果很严重!身处舆论暴风眼的西安利之星,如今被全国大小媒体口诛笔伐,监管纷纷龙梅子老猫(龙梅子佳作不断)龙梅子老猫(龙梅子佳作不断)一曲寓意深刻的都说发行不到五天,龙梅子便再度与歌手徐子崴推出了电影那条河主题曲思念成河为电影上映造势宣传。一边是和老猫的寓意深刻的欢快,一边是和徐子崴的
许晴现任老公(许晴的那几段情史)许晴现任老公(许晴的那几段情史)许晴两个字,现在被网友提到最多的就是公主病这三个字!虽然自己已经52岁了!这一切源于几年前的一档综艺旅行节目,许晴在里面所犯下的错。第一季的时候经常王健林一个亿(王健林说小目标赚他1个亿)王健林一个亿(王健林说小目标赚他1个亿)商悟社张志雪记得在2016年鲁豫有约大咖一日行中王健林谈到很多年轻人想当首富的话题时表示想做世界首富,这个奋斗的方向是对的,但是最好先定一个对莫言的评价(你是站哪个角度看莫言!)对莫言的评价(你是站哪个角度看莫言!)讨论莫言的几种角度站在国家层面站在这个层面评论的人,视角开阔全面,以国家安全大局为重,敏感敌对意识形态的侵入,具有家国意识,小我服从大局,国家黑社会电影(8部最刺激的黑帮电影)黑社会电影(8部最刺激的黑帮电影)八部经典黑帮电影,各有特色,部部极具震撼,很多出色的黑帮电影吸引了众多观众的目光。接下来分享8部最佳黑帮电影!NO。8美国黑帮主演丹泽尔华盛顿罗素卢比对美元汇率(三大因素使印度卢比兑美元持续贬值)卢比对美元汇率(三大因素使印度卢比兑美元持续贬值)新华财经孟买4月13日电(记者张亚东)印度卢比兑美元汇率自上周以来,一直处于持续下跌状态。7日,印度卢比兑美元汇率大跌,从73。3天津地图高清版(天津市人文地图!)天津地图高清版(天津市人文地图!)阅读提示国家版图意识教育是爱国主义教育的一部分。能让广大读者更深刻地认识和了解伟大祖国的壮美山川和人文历史丰富的世界文化遗产和自然景观,今后我们将天黑路滑社会复杂(资治通鉴天黑路滑,社会复杂!)天黑路滑社会复杂(资治通鉴天黑路滑,社会复杂!)社会复杂,就复杂在是由各式各样的人组成,人又都会有意识的隐蔽或者伪装自己。不论是从政经商还是打仗,不论是和人相处合作还是对抗,都需要天黑请睁眼(天黑请睁眼!裹着棉袄)天黑请睁眼(天黑请睁眼!裹着棉袄)连续降雨了几天一心出门游玩的车友一定被困住了未来一个周济南又转而陷入高温里这个周六不如和浪白白带着帐篷去夜游吧到郊外的济野吹着习习凉风安营扎寨,两东芝电视机维修(苏宁买东芝电视报修后电视去哪儿了?)东芝电视机维修(苏宁买东芝电视报修后电视去哪儿了?)大洋网讯(记者谢尔实习记者蒋莉敏)东芝的电视机坏了,无法维修,是厂家的问题,却又让消费者承担费用,而且按厂家开出的条件汇款后却迟长达导航(北斗卫星全球导航系统)长达导航(北斗卫星全球导航系统)经过长达26年的艰辛建设,我国的北斗卫星全球导航系统,终于大功告成了!十几年前,我们想加入欧洲主导的伽利略导航系统(GNN),被人家奚落排挤,中国航李少波的真气运行法(真气运行点穴法)李少波的真气运行法(真气运行点穴法)小编导读胃痛腹痛心绞痛各种痛让我们痛彻心扉。真气运行学术创始人李少波教授带你运用真气运行点穴法,5个呼吸内止痛。选穴特色点穴所用的部位一般多取人