rownum là một cột giả đếm các hàng trong tập kết quả sau mệnh đề where đã được áp dụng.
SELECT table_name
FROM user_tables
WHERE rownum > 2;
TABLE_NAME
------------------------------
0 rows selected
Tuy nhiên, truy vấn này sẽ luôn trả về 0 hàng, bất kể số hàng trong bảng.
Để giải thích hành vi này, chúng ta cần hiểu cách Oracle xử lý ROWNUM. Khi gán ROWNUM cho một hàng, Oracle bắt đầu từ 1 và chỉ tăng giá trị khi một hàng được chọn; nghĩa là, khi tất cả các điều kiện trong mệnh đề WHERE được đáp ứng. Vì điều kiện của chúng tôi yêu cầu ROWNUM lớn hơn 2, không có hàng nào được chọn và ROWNUM không bao giờ được tăng vượt quá 1.
http://blog.lishman.com/2008/03/rownum.html
một liên kết stackoverflow khác
Đã chỉnh sửa
đoạn này tôi tìm thấy trên oracle trang web tốt hơn nhiều
Kiểm tra điều kiện cho các giá trị ROWNUM lớn hơn một số nguyên dương luôn sai. Ví dụ:truy vấn này không trả về hàng nào:
SELECT * FROM employees
WHERE ROWNUM > 1;
Hàng đầu tiên được tìm nạp được gán ROWNUM là 1 và làm cho điều kiện sai. Hàng thứ hai được tìm nạp bây giờ là hàng đầu tiên và cũng được gán ROWNUM là 1 và làm cho điều kiện sai. Tất cả các hàng sau đó không thỏa mãn điều kiện, vì vậy không có hàng nào được trả lại.
Bạn cũng có thể sử dụng ROWNUM để chỉ định các giá trị duy nhất cho mỗi hàng của bảng, như trong ví dụ sau: