В первом запросе первая строка будет иметь ROWNUM = 1, поэтому будет отклонена. Вторая строка также будет иметь ROWNUM = 1 (потому что предыдущая строка была отклонена) и также будет отклонена, третья строка также будет иметь ROWNUM = 1 (потому что все строки до нее были отклонены) и также будет отклонена и т. Д. В результате все строки отклоняются.
второй запрос не должен возвращать полученный вами результат. Он должен правильно назначить ROWNUM после ORDER BY.
Как следствие всего этого, вам нужно использовать не 2, а 3 уровня подзапросов, например:
SELECT EMPNO, SAL FROM ( -- Make sure row is not rejected before next ROWNUM can be assigned.
SELECT EMPNO, SAL, ROWNUM R FROM ( -- Make sure ROWNUM is assigned after ORDER BY.
SELECT EMPNO, SAL
FROM EMP
ORDER BY SAL DESC
)
)
WHERE R = 2
Результат:
EMPNO SAL
---------------------- ----------------------
3 7813