Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Принуди Oracle да върне ТОП N реда с SKIP LOCKED

"От това, което видях, Oracle прилага предиката WHERE, преди да определи кои редове да пропусне."

Мда. Това е единственият възможен начин. Не можете да пропуснете ред от набор от резултати, докато не определите набора от резултати.

Отговорът е просто да не ограничавате броя на редовете, върнати от оператора SELECT. Все още можете да използвате съветите FIRST_ROWS_n, за да насочите оптимизатора към това, че няма да вземете пълния набор от данни.

Софтуерът, извикващ SELECT, трябва да избере само първите n реда. В PL/SQL би било

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. Избиране на N реда в SQL Server

  2. Намиране на родител от най-високо ниво в SQL

  3. Как да дефинирате първичен ключ за автоматично увеличение в SQL Server

  4. SQL Server:Течове на ниво на изолация в обединените връзки

  5. 2 начина да получите информация за дялове за таблица в SQL Server (T-SQL)