"Van wat ik heb gezien, past Oracle het predikaat WHERE toe voordat wordt bepaald welke rijen moeten worden overgeslagen."
JEP. Het is de enige mogelijke manier. Je kunt pas een rij uit een resultatenset overslaan als je de resultatenset hebt bepaald.
Het antwoord is eenvoudigweg niet om het aantal rijen dat door de SELECT-instructie wordt geretourneerd, niet te beperken. Je kunt nog steeds de FIRST_ROWS_n-hints gebruiken om de optimizer erop te wijzen dat je niet de volledige dataset zult pakken.
De software die de SELECT oproept, mag alleen de eerste n rijen selecteren. In PL/SQL zou het zijn
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;