Để 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 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ờ tăng vượt quá 1.
Điểm mấu chốt là các điều kiện như sau sẽ hoạt động như mong đợi.
.. WHERE rownum =1;
.. WHERE rownum <=10;
Mặc dù các truy vấn với các điều kiện này sẽ luôn trả về 0 hàng.
.. WHERE rownum =2;
.. WHERE rownum> 10;
Trích dẫn từ Tìm hiểu Oracle rownum
Bạn nên sửa đổi truy vấn của mình theo cách này để hoạt động:
select empno
from
(
select empno, rownum as rn
from (
select empno
from emp
order by sal desc
)
)
where rn=2;
CHỈNH SỬA :Tôi đã sửa truy vấn để lấy rownum sau đơn đặt hàng của sal desc