我每隔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;
答案 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;