限制从 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的查询结果排序后,只返回第一条记录

Oracle 查询:如何将返回的记录限制为计数 > 1 但显示完整结果的记录?

如何从 Oracle PL/SQL 函数中返回现有表中的记录?

Oracle Pl/sql 从多个查询中返回一个游标

Oracle Sql 查询一条记录大数据中的报表

Oracle_SQL 连接和子查询