2009-01-28 38 views
5

Một trong những ứng dụng tôi quan tâm trong việc kiểm tra bảng Oracle DB mỗi x giây để xem liệu có dữ liệu mới để xử lý (ứng dụng thời gian thực khác đang phổ biến).Hạn chế trả về bản ghi từ truy vấn SQL trong Oracle

Quy trình kinh doanh khách hàng mới của chúng tôi buộc thời gian thực của chúng tôi tăng lên trong bảng này với nhiều bản ghi trong cùng một thời điểm (nói 10 000), nhưng chỉ vài lần mỗi ngày. Lần tới ứng dụng của tôi sẽ kiểm tra xem có bất kỳ thứ gì để xử lý nó gặp phải 10.000 hồ sơ và cố gắng xử lý nó không.

Nó không được thiết kế tốt và nó chỉ không đủ tốt. Sửa nhanh sẽ giới hạn số lượng bản ghi ứng dụng nhận được từ Oracle, lần sau nó sẽ chọn 50 (hoặc bất kỳ thứ gì khác), v.v.

Làm cách nào để giới hạn trong Oracle SQL số ​​bản ghi được trả về? Đặt hàng các vấn đề!

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

Trả lời

15
select * from 
(select c.* from cool_table c 
    where date >= to_date('200901010000', 'YYYYMMDDhh24mi') 
    order by seq_nr, entry_dts) 
where rownum < 50 

Bạn cần phải đảm bảo trật tự được thực hiện trước khi lọc rownum (nếu không nó sẽ mất 50 hàng đầu tiên mà nó tìm thấy, sau đó ra lệnh cho họ)

1

Bắt đầu với Oracle 12c nó cuối cùng hỗ trợ tiêu chuẩn ANSI fetch first n rows tùy chọn:

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

này có thể được kết hợp với một bù đắp cho paging:

select * 
from cool_table where date >= to_date('200901010000', 'YYYYMMDDhh24mi') 
order by seq_nr, entry_dts 
offset 50 rows 
fetch first 50 rows only; 
Các vấn đề liên quan