限制从 Oracle 中的 SQL 查询返回的记录
Posted
技术标签:
【中文标题】限制从 Oracle 中的 SQL 查询返回的记录【英文标题】:Limiting returned record from SQL query in Oracle 【发布时间】:2009-01-28 04:15:40 【问题描述】:我负责每 x 秒检查一次 Oracle 数据库表以查看是否有新数据要处理的应用程序(其他实时应用程序正在填充它)。
我们的新客户端业务流程强制我们实时在此表中同时填充大量记录(例如 10000 条),但每天只填充几次。下次我的应用程序检查是否有任何要处理的内容时,它会遇到 10 000 条记录并尝试处理它。
它的设计不是很好,只是规模不够好。快速修复将限制应用程序从 Oracle 获得的记录数量,下次它将选择另外 50 个(或其他)等。
如何在 Oracle SQL 中限制返回记录的数量?订单很重要!
select *
from cool_table where date >= to_date('200901010000', 'YYYYMMDDhh24mi')
order by seq_nr, entry_dts;
【问题讨论】:
【参考方案1】:select * from
(select c.* from cool_table c
where date >= to_date('200901010000', 'YYYYMMDDhh24mi')
order by seq_nr, entry_dts)
where rownum < 50
您需要确保在 rownum 过滤之前完成排序(否则它将先找到它找到的前 50 行,然后再排序)
【讨论】:
【参考方案2】:从 Oracle 12c 开始,它最终支持标准 ANSI fetch first n rows
选项:
select *
from cool_table where date >= to_date('200901010000', 'YYYYMMDDhh24mi')
order by seq_nr, entry_dts
fetch first 50 rows only;
这可以与分页偏移结合使用:
select *
from cool_table where date >= to_date('200901010000', 'YYYYMMDDhh24mi')
order by seq_nr, entry_dts
offset 50 rows
fetch first 50 rows only;
【讨论】:
以上是关于限制从 Oracle 中的 SQL 查询返回的记录的主要内容,如果未能解决你的问题,请参考以下文章
Oracle 查询:如何将返回的记录限制为计数 > 1 但显示完整结果的记录?