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

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方面的内容,感兴趣的朋友可以关注下~

雅园玉道(玉雕大师倪伟滨)雅园玉道(玉雕大师倪伟滨)倪伟滨,1958年出生于上海。1978年开始从事玉雕创作。1985年创办长宁区雅园工艺品厂。2002年任中国宝玉石协会第二届玉石专业委员会会员。2003年许知远俞飞鸿(俞飞鸿真美,许知远我还梦见过你2回)许知远俞飞鸿(俞飞鸿真美,许知远我还梦见过你2回)俞飞鸿出席时装周的照片被不少网友讨论女神太美了!还记得十三邀第一季时,许知远也访问过女神俞飞鸿。一向看上去很淡定的许知远,在采访俞俞飞鸿演过的电视剧(黄晓明赵薇俞飞鸿)俞飞鸿演过的电视剧(黄晓明赵薇俞飞鸿)现在的剧集作品与大银幕作品之间的差异越来越小,不管是阵容还是制作质量上已经越来越深得人心,隔三岔五就出一部的大作成为了观众的期待,既满足了自己白云山凉茶(凉茶市场遇凉!)白云山凉茶(凉茶市场遇凉!)怕上火,喝王老吉!这一经典广告语,让这款老字号凉茶深入人心。不过,王老吉近来有点上火,毕竟去年营业收入相较上一年下降了13。2017年,王老吉净利润6。陕西镇安塔云山(出尘逸世塔云山文宋力行)陕西镇安塔云山(出尘逸世塔云山文宋力行)塔云山陶浒绘炎夏溽热,整日呆在水泥森林里实在难耐,遂与几个朋友商议,驱车前往位于镇安县城西南35公里,柴坪镇境内的塔云山。塔云山是驰名秦鄂川华尔街电影(10部华尔街最经典电影)华尔街电影(10部华尔街最经典电影)广告很少有电影能够真正把握一个交易者的生活精髓。横亘在盈利和潜在亏损之间的那根弦始终绷紧着,但是主流电影却很难真正捕捉到这一点。像华尔街和锅炉房木流牛马(诸葛亮发明的木牛流马)木流牛马(诸葛亮发明的木牛流马)诸葛亮发明的木牛流马,真很神奇吗?文杨森武图网络三国演义第一百二回里,诸葛亮建兴九年至十二年,北伐中原至祁山,因蜀国山高路远,崎岖难行,运粮草不便,微信语音听筒模式怎么变扬声器(微信语音通话扬声器已关怎么恢复)相信今天圈内最热的内容,莫过于iOS可修改提示音,毕竟天下苦此久矣。一人声响,多人尴尬的场景将去而不返。07月14日上午11点左右,团队推出了iOSfor8。0。8正式版,新增提示自然疗法大师杨奕(睡不好按按脚!不吃药的草根方!)自然疗法大师杨奕(睡不好按按脚!不吃药的草根方!)失眠,人生的一大痛苦,中医讲因为心肾不交,要么是因为思虑太多火都在上面要么是因为肾水不足浇灭不了心火再者就是因为脾胃气虚肾水升不上北京形体训练(北京形体气质培训班)北京形体训练(北京形体气质培训班)女人的美不光是容貌,贵在气质和品性。优雅女人的9个习惯,对照看看你占了几条?女人其实也很累,现在的女人已经走入到社会中的各个岗位中,成为了家中的半教育文章(丹心献教育校园写春秋)教育文章(丹心献教育校园写春秋)在教育战线上,有许多默默无闻无私奉献的共产党员。曲靖一中教师陈彪爱岗敬业忠于职守情系学生尽职尽责,用满腔激情践行了自己的初心和使命,充分体现了良好的
马伊琍父亲(马伊琍的危险与疯狂)马伊琍父亲(马伊琍的危险与疯狂)马伊琍自认是一个没什么野心的人。聊愿望她说希望家人健康平安,谈起女儿她希望顺其自然,讲到工作她表示每年最多拍两部戏,剩下的时间则全部用来放空,和角色爱的激清(李银河一生两段激情之爱)爱的激清(李银河一生两段激情之爱)李银河是著名的社会学者,她与作家王小波炙热的爱情故事,已成为我们追求浪漫爱情的模板。王小波曾在爱你就像爱生命里写道你好哇!李银河。一想到你,我的丑杨澜访谈录刘德华(刘德华最想演绎角色是相声演员)杨澜访谈录刘德华(刘德华最想演绎角色是相声演员)刘德华郭德纲有网友在社交平台上发了刘德华与郭德纲的合照,引起了大家的热议。从照片中明显看到,两人很默契,单手插兜,一身黑色休闲打扮,员工流失管理(员工流失分析与对策资料包)员工流失管理(员工流失分析与对策资料包)员工为什么离职,一直是困扰企业的难题。如何降低员工的离职率,必须从研究员工为什么离职开始。一般员工离职之前,都会先有厌倦情绪不快乐不满意抱怨苏东坡的诗(诗词人生豁达皆文章之苏东坡)苏东坡的诗(诗词人生豁达皆文章之苏东坡)前阵子央视爸爸经典咏流传节目组邀请了香港巨星谭校长来,演唱一曲定风波,那豪迈潇洒的气势,举重若轻的表演掀起一股朗读诗词的热潮。能让大名鼎鼎的最近新出的电影(56部电影定档暑期档!)最近新出的电影(56部电影定档暑期档!)来源央视财经随着暑期到来国内电影市场暑期档已经拉开序幕据统计今年暑期档已定档56部影片多种题材电影将与观众见面电影暑期档开启56部电影集中上网络电视成人(就低估了这部新出的成人剧)网络电视成人(就低估了这部新出的成人剧)电视剧中的战斗机,当属家庭伦理剧。家长里短,感情纠葛,甚至还会有你死我活的复仇戏码。不仅经久不衰,更是主妇闲暇挚爱,饭后家庭娱乐必备佳品。其碎碎念是什么意思(别样的碎碎念)碎碎念是什么意思(别样的碎碎念)别样的碎碎念文紫玲珑茶杯碎了。一只小茶杯碎了。一只白瓷青花小茶杯碎了。我的一只白瓷青花小茶杯碎了。终于知道碎碎念的含义了。碎了,真碎了,就是碎了,碎芙蓉出水牛股形态(出水芙蓉形态六股酝酿主升浪)芙蓉出水牛股形态(出水芙蓉形态六股酝酿主升浪)1春晖智控总股本1。36亿股,流通A股3060万股,2021年一季报净利润1527。6万元。题材概念智能机器新能源车天然气公司主营流体芙蓉锦鸡图(如何欣赏中国花鸟画)芙蓉锦鸡图(如何欣赏中国花鸟画)五代黄荃写生珍禽图花鸟画是以花卉瓜果等植物和昆虫鸟类鱼类翎毛走兽等动物为题材的绘画的统称。花鸟画自隋唐以后,逐渐脱离人物画的背景而独立形成画科,至五办公室减肥动作(适合办公室减肥运动的几个小动作)办公室减肥动作(适合办公室减肥运动的几个小动作)瑞来士告诉你,平时在办公室一坐便是一天的人,坐久了身体会出问题,那么我们可以在办公室里恰当的做些运动来缓解疲惫。下面小编为大家分享一