Bạn không thể sử dụng rownum
như thế này. rownum
được tính khi các giá trị thực sự được trả về từ truy vấn - chỉ khi một hàng được trả về. Do đó, tuyên bố:
where rownum = 2
sẽ không bao giờ trả về giá trị, vì cần phải có "1" trước "2".
Nếu bạn đang sử dụng Oracle 12+, bạn có thể sử dụng offset
mệnh đề với fetch first <n> rows only
. Trong các phiên bản cũ hơn, bạn có thể sử dụng row_number() over ()
để tính toán một số hàng dưới dạng một cột và sử dụng số đó trong where
.
Trên thực tế, truy vấn của bạn đã sử dụng một truy vấn con, vì vậy bạn có thể làm điều gì đó như:
select *
from (select . . .,
row_number() over (order by Request_ID, Actual_Start_Date) as rn
. . .
) t
WHERE rn < (1000000 * to_Number(:X) and)
rn >= (1000000 * (to_Number(:X)-1))