"Dari apa yang saya lihat, Oracle menerapkan predikat WHERE sebelum menentukan baris mana yang harus dilewati."
Ya. Ini adalah satu-satunya cara yang mungkin. Anda tidak dapat melewatkan satu baris dari kumpulan hasil sampai Anda menentukan kumpulan hasil.
Jawabannya adalah tidak membatasi jumlah baris yang dikembalikan oleh pernyataan SELECT. Anda masih dapat menggunakan petunjuk FIRST_ROWS_n untuk mengarahkan pengoptimal bahwa Anda tidak akan mengambil set data lengkap.
Perangkat lunak yang memanggil SELECT seharusnya hanya memilih n baris pertama. Di PL/SQL, itu akan menjadi
DECLARE
CURSOR c_1 IS
SELECT /*+FIRST_ROWS_1*/ qt.ID
FROM QueueTest qt
WHERE Locked IS NULL
ORDER BY PRIORITY
FOR UPDATE SKIP LOCKED;
BEGIN
OPEN c_1;
FETCH c_1 into ....
IF c_1%FOUND THEN
...
END IF;
CLOSE c_1;
END;