Bắt đầu từ Oracle 12c R1 (12.1), có là một hàng khoản hạn chế . Nó không sử dụng LIMIT
cú pháp quen thuộc , nhưng nó có thể thực hiện công việc tốt hơn với nhiều tùy chọn hơn. Bạn có thể tìm thấy cú pháp đầy đủ ở đây .
Để trả lời câu hỏi ban đầu, đây là truy vấn:
SELECT *
FROM sometable
ORDER BY name
OFFSET 20 ROWS FETCH NEXT 10 ROWS ONLY;
(Đối với các phiên bản Oracle trước đó, vui lòng tham khảo các câu trả lời khác trong câu hỏi này)
Ví dụ:
Các ví dụ sau được trích dẫn từ trang được liên kết , với hy vọng ngăn chặn sự thối rữa liên kết.
Thiết lập
CREATE TABLE rownum_order_test (
val NUMBER
);
INSERT ALL
INTO rownum_order_test
SELECT level
FROM dual
CONNECT BY level <= 10;
COMMIT;
Có gì trong bảng?
SELECT val
FROM rownum_order_test
ORDER BY val;
VAL
----------
1
1
2
2
3
3
4
4
5
5
6
6
7
7
8
8
9
9
10
10
20 rows selected.
Nhận N
hàng đầu tiên
SELECT val
FROM rownum_order_test
ORDER BY val DESC
FETCH FIRST 5 ROWS ONLY;
VAL
----------
10
10
9
9
8
5 rows selected.
Nhận N
hàng đầu tiên , nếu hàng N
thứ có quan hệ, hãy lấy tất cả các hàng được buộc
SELECT val
FROM rownum_order_test
ORDER BY val DESC
FETCH FIRST 5 ROWS WITH TIES;
VAL
----------
10
10
9
9
8
8
6 rows selected.
x
% Hàng đầu
SELECT val
FROM rownum_order_test
ORDER BY val
FETCH FIRST 20 PERCENT ROWS ONLY;
VAL
----------
1
1
2
2
4 rows selected.
Sử dụng một phần bù, rất hữu ích cho phân trang
SELECT val
FROM rownum_order_test
ORDER BY val
OFFSET 4 ROWS FETCH NEXT 4 ROWS ONLY;
VAL
----------
3
3
4
4
4 rows selected.
Bạn có thể kết hợp bù với tỷ lệ phần trăm
SELECT val
FROM rownum_order_test
ORDER BY val
OFFSET 4 ROWS FETCH NEXT 20 PERCENT ROWS ONLY;
VAL
----------
3
3
4
4
4 rows selected.
Thật xấu hổ, Oracle không có chút cú pháp để làm cho yêu cầu chung này trở nên đơn giản.
– Hoàng Diễm Kiều 21:46:51 22/01/2009Chuẩn hóa trong SQL: 2008.
– Trịnh Thúy Minh 14:18:21 26/01/2009Cảm ơn đã hỏi câu hỏi này. 3,5 năm sau khi được hỏi, tôi thấy mình có cùng nhu cầu với Oracle 11g vì IE 8 không có đủ mã lực Javascript cho DataTables.net. Hy vọng rằng Oracle sẽ thực hiện điều này một ngày nào đó.
– Tạ Phúc Duy 17:10:47 10/07/2012Giới hạn đã được Tom Kyte công bố cho Oracle 12c ...
– Lê Quỳnh Thư 11:44:54 03/12/2012Lấy trang tiếp theo trong tập kết quả?
– Vũ Quốc Trung 16:33:29 16/12/2013