sql >> Databáze >  >> RDS >> Sqlserver

Vynutit Oracle vrátit TOP N řádků s SKIP LOCKED

"Podle toho, co jsem viděl, Oracle použije predikát WHERE, než určí, které řádky se mají přeskočit."

Ano. Je to jediný možný způsob. Nemůžete přeskočit řádek ze sady výsledků, dokud sadu výsledků neurčíte.

Odpovědí je jednoduše neomezovat počet řádků vrácených příkazem SELECT. Stále můžete použít tipy FIRST_ROWS_n, které optimalizátoru nasměrují, že nebudete získávat celý soubor dat.

Software volající SELECT by měl vybrat pouze prvních n řádků. V PL/SQL by to bylo

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. Řešení indexu pro uživatele tabulky je poškozené; zkuste to opravit

  2. MySQL vyhledávání v seznamu čárek

  3. Vrátit pouze číselné hodnoty v MariaDB

  4. Získejte první pondělí v měsíci v SQLite