Você não pode usar
rownum assim. rownum é calculado quando os valores são realmente retornados da consulta -- somente quando uma linha é retornada. Daí a afirmação:where rownum = 2
nunca retornará um valor, porque precisa haver um "1" antes de um "2".
Se você estiver usando o Oracle 12+, poderá usar o
offset cláusula com fetch first <n> rows only . Em versões anteriores, você pode usar row_number() over () para calcular um número de linha como uma coluna e usá-lo no where . Na verdade, sua consulta já usa uma subconsulta, então você pode fazer algo como:
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))