Oracle weist ROWNUM sequentiell Werte zu, wenn Zeilen von der Abfrage erzeugt werden - daher erhält die erste abgerufene Zeile ROWNUM=1, die zweite abgerufene Zeile ROWNUM=2, die dritte abgerufene Zeile ROWNUM=3 usw. Beachten Sie - für eine Zeile um ROWNUM=3 zugewiesen zu werden, MÜSSEN zwei vorhergehende Zeilen geholt werden. Und deshalb gibt Ihre Abfrage keine Zeilen zurück. Sie fragen die Datenbank nach der dritten abgerufenen Zeile - aber die Zeilen 1 und 2 wurden nie abgerufen.
Versuchen Sie zur Demonstration, die folgenden Abfragen auszuführen:
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
Versuchen Sie Folgendes, um Ihr Problem zu umgehen:
SELECT ROW_NUMBER FROM
(SELECT ROWNUM AS ROW_NUMBER, S.* FROM SALARY S)
WHERE ROW_NUMBER = 3;
Teilen und genießen.