首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用Oracle分页

使用Oracle分页
EN

Stack Overflow用户
提问于 2008-10-27 22:37:21
回答 4查看 143K关注 0票数 117

我并不像我希望的那样熟悉Oracle。我有大约25万条记录,我想每页显示100条记录。目前,我有一个存储过程,它使用数据适配器和dataset将25万条记录检索到dataset,并使用dataadapter.Fill(dataset)方法对来自存储过程的结果进行处理。如果我将"Page Number“和"Number of records page”作为可以作为参数传递的整数值,那么返回该特定部分的最佳方法是什么?比方说,如果我传递10作为页码,120作为页数,从select语句中得到1880到1200,或者类似的东西,我头脑中的数学可能会出错。

我正在用.NET和C#做这件事,尽管这并不重要,如果我能在SQL端做到这一点,那么我应该很酷。

更新:我能够使用Brian的建议,它工作得很好。我想做一些优化工作,但页面在4到5秒而不是一分钟内就会出现,而且我的分页控制能够很好地集成到我新存储的proc中。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2008-10-27 22:46:31

这样的代码应该可以工作:From Frans Bouma's Blog

代码语言:javascript
复制
SELECT * FROM
(
    SELECT a.*, rownum r__
    FROM
    (
        SELECT * FROM ORDERS WHERE CustomerID LIKE 'A%'
        ORDER BY OrderDate DESC, ShippingDate DESC
    ) a
    WHERE rownum < ((pageNumber * pageSize) + 1 )
)
WHERE r__ >= (((pageNumber-1) * pageSize) + 1)
票数 160
EN

Stack Overflow用户

发布于 2008-10-27 22:57:20

关于分页的Ask Tom和非常非常有用的分析函数。

这是该页面的摘录:

代码语言:javascript
复制
select * from (
    select /*+ first_rows(25) */
     object_id,object_name,
     row_number() over
    (order by object_id) rn
    from all_objects
)
where rn between :n and :m
order by rn;
票数 145
EN

Stack Overflow用户

发布于 2015-11-03 19:32:28

我只想总结一下答案和评论。有许多方法可以进行分页。

在oracle12c之前,没有偏移/获取功能,所以看看@jasonk建议的whitepaper。这是我找到的关于不同方法的最完整的文章,详细解释了各种方法的优缺点。在这里复制粘贴它们会花费大量的时间,所以我就不这么做了。

jooq创建者也有一篇很好的文章,解释了oracle和其他数据库分页的一些常见注意事项。jooq's blogpost

好消息是,从oracle 12c开始,我们有了一个新的偏移/获取功能。OracleMagazine 12c new features。请参考"Top-N查询和分页“

您可以通过发出以下语句来检查您的oracle版本

代码语言:javascript
复制
SELECT * FROM V$VERSION
票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/241622

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档