Oracle memberikan nilai ke ROWNUM secara berurutan saat baris dihasilkan oleh kueri - dengan demikian, baris pertama yang diambil mendapatkan ROWNUM=1, baris kedua yang diambil mendapatkan ROWNUM=2, baris ketiga yang diambil mendapatkan ROWNUM=3, dll. Pemberitahuan - untuk satu baris untuk ditugaskan ROWNUM=3 dua baris sebelumnya HARUS diambil. Dan inilah mengapa kueri Anda tidak mengembalikan baris. Anda meminta database untuk mengambil baris ketiga - tetapi baris 1 dan 2 tidak pernah diambil.
Untuk mendemonstrasikan, coba jalankan kueri berikut:
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
Untuk mengatasi masalah Anda, coba yang berikut ini:
SELECT ROW_NUMBER FROM
(SELECT ROWNUM AS ROW_NUMBER, S.* FROM SALARY S)
WHERE ROW_NUMBER = 3;
Bagikan dan nikmati.