Oracle wijst waarden opeenvolgend toe aan ROWNUM terwijl rijen worden geproduceerd door de query - dus de eerste opgehaalde rij krijgt ROWNUM=1, de tweede opgehaalde rij krijgt ROWNUM=2, de derde opgehaalde rij krijgt ROWNUM=3, enz. Let op - voor een rij toe te wijzen ROWNUM=3 twee voorgaande rijen MOETEN worden opgehaald. En dit is de reden waarom uw zoekopdracht geen rijen retourneert. U vraagt de database om de opgehaalde derde rij, maar rijen 1 en 2 zijn nooit opgehaald.
Probeer de volgende zoekopdrachten uit om dit te demonstreren:
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
Probeer het volgende om uw probleem te omzeilen:
SELECT ROW_NUMBER FROM
(SELECT ROWNUM AS ROW_NUMBER, S.* FROM SALARY S)
WHERE ROW_NUMBER = 3;
Deel en geniet.