Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Zmuś Oracle do zwrócenia TOP N wierszy z SKIP LOCKED

„Z tego, co widziałem, Oracle stosuje predykat WHERE przed określeniem wierszy do pominięcia”.

Tak. To jedyny możliwy sposób. Nie możesz pominąć wiersza z zestawu wyników, dopóki nie określisz zestawu wyników.

Odpowiedzią jest po prostu nie ograniczanie liczby wierszy zwracanych przez instrukcję SELECT. Nadal możesz użyć wskazówek FIRST_ROWS_n, aby wskazać optymalizatorowi, że nie będzie pobierał pełnego zestawu danych.

Oprogramowanie wywołujące SELECT powinno wybrać tylko pierwsze n wierszy. W PL/SQL byłoby to

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Używanie zmiennej w zapytaniu OPENROWSET

  2. na czym polega problem z AttachDbFilename?

  3. Jak wykonać zapytanie przekazujące DELETE w SQL Server

  4. Jak używać FILEPROPERTY() w SQL Server

  5. Typy kursorów programu SQL Server — Statyczny kursor tylko do przodu | Samouczek SQL Server / Samouczek TSQL