oracle数据库如何和实现多数据集分页功能?

image.png

官方的没看懂:Oracle数据库中本身有行序号ROWNUM,因此只需要将上例ds1数据集修改成如下:SELECT * FROM (select A.*,ROWNUM rn from (select * from 产品) A where ROWNUM <=${start}+20) where RN >=${start}即可


注:ROWNUM只支持小于,大于是不支持的,因此要做如上定义。


FineReport FR2019 发布于 2019-4-16 13:51
1min目标场景问卷 立即参与
回答问题
悬赏:4 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共4回答
最佳回答
0
spylLv5见习互助
发布于2019-4-16 14:58

分页可以用条件属性克制的。你有行号了。选择行号单元格设置条件属性。分页,行后分页

image.png

  • FR2019 FR2019(提问者) 谢谢,就是我查询数据比较多,2万多条,想默认就显示10条,点下一页在显示10条,这样查询速度也快,改怎么实现?
    2019-04-16 16:22 
  • FR2019 FR2019(提问者) 这种方式sql 语句每次还是读取2万条的,能否一次执行10条,用户点下一页在显示10条
    2019-04-16 16:23 
最佳回答
0
JackWangLv5中级互助
发布于2019-4-16 17:11

前几天有个同事说用触发器解决过数据量大的问题

最佳回答
0
wukaihuaLv5初级互助
发布于2019-4-17 15:50

select * from (

select a.*,row_number() over (partition by  1 order by ) RN from 表 a

) where RN>=11 and RN<=20 


给一个RN序号可以控制行数,不过不知道速度怎么样,你可以试一下

最佳回答
0
785027336Lv5初级互助
发布于2019-4-17 17:40(编辑于 2019-4-17 17:40)

根据你的提问,看起来你是想要展示页面的数据,每页展示10条,有两个思路:

1.查询完毕后再用页面进行分页,这样的优势是一次性从数据库读取到内存,后面页面的加载速度快,缺点是如果数据量大,可能导致页面查询速度较慢,如果用这个方案要在后台处理的时候做优化,提高效率。

2.每次翻页请求,就需要修改数据集查询,以我传的数据集为例:

①查询语句:select * from (select f.*,rownum rn from domestic_flight f where  ROWNUM

②url需要初始化p1、p2参数为:http://localhost:8075/webroot/decision/view/report?viewlet=paging_test.cpt&p1=0&p2=1

③不使用原来的翻页按钮,而是在页面中加入一个超链接传递动态参数,即模板中的那个p1=$p2 p2=$p2+1

④这种方法也有很明显的缺点,因为每次查询都要先查询p2*10条,页码越大,需要查询的数据就越多,也就会越慢。

  1. paging_test.cpt


  • FR2019 FR2019(提问者) 第一种方法后台改怎么优化那?
    2019-04-19 10:14 
  • 785027336 785027336 回复 FR2019(提问者) 后台优化SQL效率,报表展示用的表尽量用一张表,不要写关联的SQL,关联的查询可以通过跑批和定时任务在后台先完成
    2019-04-19 10:41 
  • FR2019 FR2019(提问者) 回复 785027336 谢谢
    2019-04-19 14:41 
  • 5关注人数
  • 1117浏览人数
  • 最后回答于:2019-4-17 17:40
    请选择关闭问题的原因
    确定 取消
    返回顶部