Oracle tildeler værdier til ROWNUM sekventielt, efterhånden som rækker produceres af forespørgslen - således får den første hentede række ROWNUM=1, den anden hentede række får ROWNUM=2, den tredje hentede række får ROWNUM=3 osv. Bemærk - for en række for at blive tildelt ROWNUM=3 SKAL to foregående rækker hentes. Og det er derfor, din forespørgsel ikke returnerer nogen rækker. Du beder databasen om den tredje række hentet - men række 1 og 2 er aldrig blevet hentet.
For at demonstrere, prøv at køre følgende forespørgsler:
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
For at løse dit problem, prøv følgende:
SELECT ROW_NUMBER FROM
(SELECT ROWNUM AS ROW_NUMBER, S.* FROM SALARY S)
WHERE ROW_NUMBER = 3;
Del og nyd.