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;
Споделете и се насладете.