sql >> Database >  >> RDS >> Sqlserver

Forceer Oracle om TOP N-rijen terug te geven met SKIP LOCKED

"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;


  1. Onjuiste neutralisatie van speciale elementen die worden gebruikt in een SQL-opdracht

  2. Hoe de IF/ELSE-instructie te gebruiken om een ​​nieuw xml-knooppuntitem in Sql bij te werken of te maken

  3. IDENTITY() vs IDENTITY() in SQL Server:wat is het verschil?

  4. Moet ik het datatype datetime of timestamp in MySQL gebruiken?