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

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类型叫universalrowed(UROWID),支持上述physicalrowid和logicalrowed,并且支持非oracletable,即支持所有类型的rowid,但COMPATIBLE必须在8。1或以上。
  每个表在oracle内部都有一个ROWID伪列,它在所有sql中无法显示,不占存储空间;它用于从表中查询行的地址或者在where中进行参照,rowid伪列不存储在数据库中,它不是数据库数据,这是从database及table的逻辑结构来说的,事实上,在物理结构上,每行由一个或多个rowpieces组成,每个rowpiece的头部包含了这个piece的address,即rowid。从这个意义上来说,rowid还是占了磁盘空间的。
  我们在创建表时,可以为列指定为rowid数据类型,但oracle并不保证列中的数据是合法的rowid值,必须由应用程序来保证,另外,类型为rowid的列需要6bytes存储数据
  一般实现分页的过程如下:
  1)获取数据物理地址:SELECTROWIDRID,tablenumberFROMtablenameORDERBYtablenumberDESC
  2)取得最大页数:SELECTROWNUMRN,RIDFROM(SELECTROWIDRID,tablenumberFROMtablenameORDERBYtablenumberDESC)WHEREROWNUMlt;xx
  3)取得最小页数:SELECTRIDFROM(SELECTROWNUMRN,RIDFROM(SELECTROWIDRID,tablenumberFROMtablenameORDERBYtablenumberDESC)WHEREROWNUMlt;xx)
  4)因为取得的页数都是物理地址,再根据物理地址,查询出具体数据currentPage:当前页数pageSize:每页显示几条SELECTFROMtablenameWHEREROWIDIN(SELECTRIDFROM(SELECTROWNUMRN,RIDFROM(SELECTROWIDRID,tablenumberFROMtablenameORDERBYtablenumberDESC)WHEREROWNUMlt;((currentPage1)pageSizepageSize))WHERERNgt;((currentPage1)pageSize))ORDERBYtablenumberDESC;
  2、按分析函数ROWNUMBER()OVER()来分
  语法格式:rownumber()over(partitionby分组列orderby排序列desc)
  oracle中的ROWNUMBER()OVER(partitionbycol1orderbycol2)表示根据col1分组,在分组内部根据col2排序,而此函数计算的值就表示每组内部排序后的顺序编号(组内是连续且唯一的)
  一般实现分页的过程如下:currentPage:当前页数pageSize:每页显示几条SELECTFROM(SELECTT。,ROWNUMBER()OVER(ORDERBYtablenumberDESC)RKFROMtT)WHERERKlt;((currentPage1)pageSizepageSize)ANDRKgt;((currentPage1)pageSize);
  3、根据rownum来分
  rownum是伪列,是在获取查询结果集后再加上去的(获取一条记录加一个rownum)。对符合条件的结果添加一个从1开始的序列号
  对于rownum来说它是oracle系统顺序分配为从查询返回的行的编号,返回的第一行分配的是1,第二行是2,依此类推,这个伪字段可以用于限制查询返回的总行数,且rownum不能以任何表的名称作为前缀。
  一般实现分页的过程如下:currentPage:当前页数pageSize:每页显示几条SELECTFROM(SELECTT。,ROWNUMRNFROM(SELECTFROMtORDERBYtablenumberDESC)TWHEREROWNUMlt;((currentPage1)pageSizepageSize))WHERERNgt;((currentPage1)pageSize);
  4、存储过程实现
  这个存储过程主要是让大家看看分页的实现过程,可忽略1、开发一个包,在该包中,定义类型testcursor,是个游标createorreplacepackagetestpackageastypetestcursorisrefcursor;endtestpackage;2、开始编写分页的过程createorreplaceprocedurefenye(tableNameinvarchar2,表名pageSizeinnumber,一页显示记录数pageNowinnumber,当前页myrowsoutnumber,总记录数myPageCountoutnumber,总页数pcursorouttestpackage。testcursor返回的记录集)is定义部分定义sql语句字符串vsqlvarchar2(1000);定义两个整数vbeginnumber:(pageNow1)pageSize1;vendnumber:pageNowpageSize;begin执行部份vsql:39;selectfrom(selectt1。,rownumrnfrom(selectfrom39;tableName39;)t1whererownumlt;39;vend39;)whererngt;39;vbegin;把游标和sql关联openpcursorforvsql;计算myrows和myPageCount组织一个sqlvsql:39;selectcount()from39;tableName;执行sql,并把返回的值赋给myrows;executeimmediatevsqlintomyrows;计算myPageCountifmod(myrows,PageSize)0thenmyPageCount:myrowsPageSize;elsemyPageCount:myrowsPageSize1;endif;关闭游标closepcursor;end;
  5、实例演示
  5。1、环境准备createtablet(EMPNONUMBER(4)notnull,ENAMEVARCHAR2(10),JOBVARCHAR2(9),MGRNUMBER(4),HIREDATEDATE,SALNUMBER(7,2),COMMNUMBER(7,2),DEPTNONUMBER(2));altertabletaddconstraintPKEMPprimarykey(EMPNO)usingindex;INSERTINTOtVALUES(39;736939;,39;SMITH39;,39;CLERK39;,39;790239;,TODATE(39;1980121700:00:0039;,39;SYYYYMMDDHH24:MI:SS39;),39;80039;,NULL,39;2039;);INSERTINTOtVALUES(39;749939;,39;ALLEN39;,39;SALESMAN39;,39;769839;,TODATE(39;1981022000:00:0039;,39;SYYYYMMDDHH24:MI:SS39;),39;160039;,39;30039;,39;3039;);INSERTINTOtVALUES(39;752139;,39;WARD39;,39;SALESMAN39;,39;769839;,TODATE(39;1981022200:00:0039;,39;SYYYYMMDDHH24:MI:SS39;),39;125039;,39;50039;,39;3039;);INSERTINTOtVALUES(39;756639;,39;JONES39;,39;MANAGER39;,39;783939;,TODATE(39;1981040200:00:0039;,39;SYYYYMMDDHH24:MI:SS39;),39;297539;,NULL,39;2039;);INSERTINTOtVALUES(39;765439;,39;MARTIN39;,39;SALESMAN39;,39;769839;,TODATE(39;1981092800:00:0039;,39;SYYYYMMDDHH24:MI:SS39;),39;125039;,39;140039;,39;3039;);INSERTINTOtVALUES(39;769839;,39;BLAKE39;,39;MANAGER39;,39;783939;,TODATE(39;1981050100:00:0039;,39;SYYYYMMDDHH24:MI:SS39;),39;285039;,NULL,39;3039;);INSERTINTOtVALUES(39;778239;,39;CLARK39;,39;MANAGER39;,39;783939;,TODATE(39;1981060900:00:0039;,39;SYYYYMMDDHH24:MI:SS39;),39;245039;,NULL,39;1039;);INSERTINTOtVALUES(39;778839;,39;SCOTT39;,39;ANALYST39;,39;756639;,TODATE(39;1987041900:00:0039;,39;SYYYYMMDDHH24:MI:SS39;),39;300039;,NULL,39;2039;);INSERTINTOtVALUES(39;783939;,39;KING39;,39;PRESIDENT39;,NULL,TODATE(39;1981111700:00:0039;,39;SYYYYMMDDHH24:MI:SS39;),39;500039;,NULL,39;1039;);INSERTINTOtVALUES(39;784439;,39;TURNER39;,39;SALESMAN39;,39;769839;,TODATE(39;1981090800:00:0039;,39;SYYYYMMDDHH24:MI:SS39;),39;150039;,39;039;,39;3039;);INSERTINTOtVALUES(39;787639;,39;ADAMS39;,39;CLERK39;,39;778839;,TODATE(39;1987052300:00:0039;,39;SYYYYMMDDHH24:MI:SS39;),39;110039;,NULL,39;2039;);INSERTINTOtVALUES(39;790039;,39;JAMES39;,39;CLERK39;,39;769839;,TODATE(39;1981120300:00:0039;,39;SYYYYMMDDHH24:MI:SS39;),39;95039;,NULL,39;3039;);INSERTINTOtVALUES(39;790239;,39;FORD39;,39;ANALYST39;,39;756639;,TODATE(39;1981120300:00:0039;,39;SYYYYMMDDHH24:MI:SS39;),39;300039;,NULL,39;2039;);INSERTINTOtVALUES(39;793439;,39;MILLER39;,39;CLERK39;,39;778239;,TODATE(39;1982012300:00:0039;,39;SYYYYMMDDHH24:MI:SS39;),39;130039;,NULL,39;1039;);commit;
  5。2、根据rowid查询查询当前第一页,并显示5行数据(currentPage1,pagesize5)SELECTFROMtWHEREROWIDIN(SELECTRIDFROM(SELECTROWNUMRN,RIDFROM(SELECTROWIDRID,EMPNOFROMtORDERBYEMPNODESC)WHEREROWNUMlt;((11)55))每页显示几条WHERERNgt;((11)5))当前页数ORDERBYEMPNODESC;查询当前第二页,并显示6行数据(currentPage2,pagesize6)SELECTFROMtWHEREROWIDIN(SELECTRIDFROM(SELECTROWNUMRN,RIDFROM(SELECTROWIDRID,EMPNOFROMtORDERBYEMPNODESC)WHEREROWNUMlt;((21)66))每页显示几条WHERERNgt;((21)6))当前页数ORDERBYEMPNODESC;
  5。3、根据分页函数查询查询当前第一页,并显示6行数据(currentPage1,pagesize6)SELECTFROM(SELECTT。,ROWNUMBER()OVER(ORDERBYtablenumberDESC)RKFROMtT)WHERERKlt;((11)55)每页显示几条ANDRKgt;((11)5);当前页数
  5。4、根据分页函数查询查询当前第二页,并显示4行数据(currentPage2,pagesize4)SELECTFROM(SELECTT。,ROWNUMRNFROM(SELECTFROMtORDERBYempnoDESC)TWHEREROWNUMlt;((21)44))WHERERNgt;((21)4);
  觉得有用的朋友多帮忙转发哦!后面会分享更多devops和DBA方面的内容,感兴趣的朋友可以关注下

丹麦女王玛格丽特(丹麦玛格丽特二世女王审美独特)丹麦女王玛格丽特(丹麦玛格丽特二世女王审美独特)想必大家对《安徒生童话》很熟悉吧,其中包括《卖火柴的小女孩》,《拇指姑娘》,《丑小鸭》等等,作者安徒生就是来自丹麦。别看丹……adobe账号(全新Adobe全家桶)adobe账号(全新Adobe全家桶)上周,doyoudo受邀参加了Adobe举办的新品发布会北京站的活动,并且获得了由Adobe赠送的CreativeCloud的团队版……为什么香港人宁愿蜗居也不愿来内地发展呢,看完你就懂了第一娱乐讯要说在我们中国,哪一座城市最发达?许多人们都会想到香港,虽然香港是一座土地面积并不辽阔的城市,但香港的经济水平,在全球上来说,都名列前茅。每年,都有数以万计的游客涌进……李德印32式太极剑(太极岁月之32式太极剑)李德印32式太极剑(太极岁月之32式太极剑)太极拳是智慧结晶,更是一种人生。由于太极拳的养生健身效果、文化渊源、运动特点、武术内涵、韵律审美、交际娱乐、哲学思想等浓厚的中……来氏太极图(太极图来氏太极图)来氏太极图(太极图来氏太极图)来氏太极图。我们平常只熟悉双鱼太极图,但是到了明朝时期。却出现了一位天才的易学家,名为来知德。发明的一种太极图名为:来氏太极图,这幅图……青岛特色(青岛值得一去的四条老街)青岛特色(青岛值得一去的四条老街)青岛位于我国山东,是山东经济最强的城市,同时也是一座著名的旅游城市,在青岛有许多值得一去的景点,例如著名的崂山、八大关、大珠山等等,这些……辟谷是什么?(你还在辟谷减肥吗?)辟谷是什么?(你还在辟谷减肥吗?)第一次知道辟谷这个概念,是在2004年一次中小企业主的研讨会中,主办方采取了辟谷的方式,给大家安排了七天的课程内容。那时我刚开始创业一年……同样是扶贫剧,热依扎最强助攻,新小龙女却成最大败笔今年的主旋律剧很多,质量也很高。前有《山海情》,后有《觉醒年代》,让观众认识到原来,革命剧不是只有手撕鬼子;原来,扶贫剧不是只有城乡结合土味爱情;原来,……全能空间(全能空间理想生活)全能空间(全能空间理想生活)据相关调研了解疫情期间客户对房子的需求主要表现在:户型整体设计方面、功能空间配置方面、健康舒适性能方面、日常生活体验方面等方面。同时对于居住空……为什么肛门能感受到辣味?2021诺贝尔首奖获得1000万瑞典2021年诺贝尔奖的首个奖项生理学或医学奖在北京时间10月4日17时30分揭晓,这个奖项新冠疫苗制造相关技术研究者爆冷落选,戴维朱利叶斯(DavidJulius)和阿登帕塔普蒂……休闲文章(幸福如味(休闲美文))休闲文章(幸福如味(休闲美文))杏林分香文字感谢百家号图库提供少年时期,每当看到路边摊上摆着的油焖鸡、酱猪蹄、烤猪耳、酱鸡胗、酱鸭脖还有说不出来的一些熟食,那……青苔花开,这一次,绝不能眼睁睁看她消失有一部片儿,从月初写片单时,就被扒叔盯上了。看海报,藏匿于青山丛林中的小学和排队的学生。意境感,直接拉满。再看名字,味道太值得细品《青苔花开》青苔……
海南省高考(海南出现高考满分学生)海南省高考(海南出现高考满分学生)六月花开香气浓,捷报翩翩别样红,快乐蔓延数万重,亲友相贺欢喜共,举杯畅饮话成功,今朝实现求学梦。想必很多学生在高考的时候,一定会为……太阳黑子活动(太阳黑子大量出现)太阳黑子活动(太阳黑子大量出现)俗话说万物生长靠太阳,在过去比较长的一段时间里,太阳表面的太阳活动都是特别低迷的,学界认为这是太阳进入了一段太阳活动低谷期太阳活动被认为有……兰新铁路(兰新铁路事故致9人遇难)兰新铁路(兰新铁路事故致9人遇难)兰新铁路的惨烈事故让人揪心,9名施工人员在作业过程中被K596次列车所撞致死,根据官方给出的消息,是该9名施工人员侵入上行线路导致。……3生3世十里桃花(墨渊败给夜华)3生3世十里桃花(墨渊败给夜华)三生三世十里桃花:夜华这样的男人,注定会得到幸福其实在看《三生三世十里桃花》时,一直倾向于白浅最好的归宿应该是墨渊。夜华待她,真的不……金晨遇高段位约会对象,比渣男更可怕,萧亚轩弟弟的话一针见血《女儿们的恋爱3》邀请了萧亚轩和黄皓一对真情侣,金莎和金晨各自跟节目组安排的对象约会彼此了解。起初感觉萧亚轩和黄皓这对姐弟恋,萧亚轩占据主导位置,会比较操心照顾小鲜肉男友……登山鞋和徒步鞋的区别(徒步鞋登山鞋区别是什么?)登山鞋和徒步鞋的区别(徒步鞋登山鞋区别是什么?)经常进行体育锻炼能够让我们的身体变得更加的健康,但是选择适当的鞋子在运动的时候才能避免脚部受伤,尤其是经常爬山的人一定要选……优衣库女主出道(自己往自己身上泼脏水?)优衣库女主出道(自己往自己身上泼脏水?)昨天,扫黄打非官方微博通报了关于假冒优衣库不雅视频女主角演出的调查核实真相。扫黄打非办通报表示,近日,网传优衣库不雅视频女主角复出……毕业后才知道,本地上大学和外地上大学,也是会有差距的文教育好能手十二年的寒窗苦读,只为了这一朝的金榜题名。高考之后真的是有一种如释重负的问题,但是在大学和专业的选择上,也是让同学们十分的头疼,因为这是关乎到自己未来人……申通快递查询(申通快递的物流如何批量查询)申通快递查询(申通快递的物流如何批量查询)在我们日常接触的快递中,申通快递是非常常见的,很多商家在交易的过程中都会选择申通快递,正常我们都会选择在申通官网上查询物流信息,……哪家快递最便宜(寄快递哪个最便宜)哪家快递最便宜(寄快递哪个最便宜)1顺风最贵最快,一般省内是1213,不过重量级货物选择普货物流超级划算~2申通网点多,申通价格在715元不等3圆通网点还行,价格适……Angelababy清宫造型曝光,做回模特的她好美,也暴露出网友常说,baby要是不演戏,真的好美。做回模特的baby,确实好美这话在1月8日的一组baby最新的照片中,体现得淋漓尽致。这是一组清宫照片,baby化身贵……为了不带孙子,婆婆每月给儿媳妇1万抚养费,效果出奇的好文美芽兰心年轻人生了孩子,真正自己带大的并不多,大部分都选择把孩子交给爷爷奶奶。一方面大家养成了这种习惯,认为孩子就应该交给爷爷奶奶照看,另外一方面年轻人也实在抽不开身,……
友情链接:易事利快生活快传网聚热点七猫云快好知快百科中准网快好找文好找中准网快软网