Oracle присваивает значения ROWNUM последовательно, поскольку строки создаются запросом - таким образом, первая выбранная строка получает ROWNUM = 1, вторая выбранная строка получает ROWNUM = 2, третья выбранная строка получает ROWNUM = 3 и т. Д.для назначения строки ROWNUM = 3 две предыдущие строки ДОЛЖНЫ быть выбраны.И именно поэтому ваш запрос не возвращает строк.Вы запрашиваете базу данных для третьей выбранной строки, но строки 1 и 2 никогда не выбирались.
Чтобы продемонстрировать, попробуйте выполнить следующие запросы:
SELECT S.* FROM SALARY S; -- Should return all rows
SELECT ROWNUM, S.* FROM SALARY S; -- Should return all rows with ROWNUM prepended
SELECT ROWNUM, S.* FROM SALARY WHERE ROWNUM=3; -- Should return no rows
Чтобы обойти вашуПроблема, попробуйте следующее:
SELECT ROW_NUMBER FROM
(SELECT ROWNUM AS ROW_NUMBER, S.* FROM SALARY S)
WHERE ROW_NUMBER = 3;
Поделитесь и наслаждайтесь.