限制从Oracle中的SQL查询返回的记录

时间:2009-01-28 04:15:41

标签: sql oracle

我每隔x秒检查一次Oracle数据库表中的一个应用程序,以查看是否有新数据需要处理(其他实时应用程序正在填充它)。

我们的新客户业务流程迫使我们实时填充此表,同时包含大量记录(比如10 000),但每天只有几次。下次我的应用程序检查是否有任何要处理的内容时,它会遇到10 000条记录并尝试处理它。

它设计得不是很好,而且它的规模还不够好。快速修复将限制应用程序从Oracle获取的记录数,下次它将选择另外50个(或其他)等。

如何在Oracle SQL中限制返回的记录数?订单很重要!

  select * 
    from cool_table where date >= to_date('200901010000', 'YYYYMMDDhh24mi') 
order by seq_nr, entry_dts;

2 个答案:

答案 0 :(得分:15)

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行,然后对它们进行排序)

答案 1 :(得分:1)

从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;