2009-01-28 59 views
5

我每隔x秒檢查一次Oracle數據庫表以檢查是否有新數據要處理(其他實時應用程序正在填充它)。限制Oracle中SQL查詢返回的記錄

我們新的客戶業務流程迫使我們的實時數據在同一時間填充大量記錄(比如10 000),但每天只有幾次。下次我的應用程序檢查是否有任何東西需要處理時遇到10 000條記錄並嘗試處理它。

它沒有很好的設計,它只是不夠好。快速修復將限制應用程序從Oracle獲得的記錄數量,下一次它將選擇另一個50(或其他)等。

如何限制Oracle SQL中返回的記錄數?訂單很重要!

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

回答

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

與甲骨文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;