ROWNUM
không được chỉ định cho đến khi bạn truy vấn, vì vậy bạn sẽ không thể sử dụng nó trong WHERE mệnh đề như thế.
Bạn có thể làm như sau:
SELECT COUNT(*)
FROM
(
select v1, v2, rownum rn
from Foo
) f
WHERE mod(rn,2) = 0;
ROWNUM là vị trí của hàng trong tập kết quả và nó được đánh giá sau khi các bản ghi được chọn.
Các loại truy vấn này sẽ không bao giờ hoạt động:
WHERE ROWNUM > x
WHERE ROWNUM BETWEEN x AND y
Nhưng điều này sẽ hoạt động
WHERE ROWNUM < x
Vì bạn muốn đánh giá rownum với mod chức năng nó sẽ không hoạt động vì rownum không có sẵn tại thời điểm đó. Đây là lý do tại sao, bạn sẽ phải đặt nó trong một truy vấn phụ để sử dụng mod hàm số.