sql >> Databasteknik >  >> RDS >> Sqlserver

Tvinga Oracle att returnera de N-ÖVNA raderna med SKIP LÅST

"Från vad jag har sett tillämpar Oracle WHERE-predikatet innan det bestäms vilka rader som ska hoppa över."

Japp. Det är det enda möjliga sättet. Du kan inte hoppa över en rad från en resultatuppsättning förrän du har bestämt resultatuppsättningen.

Svaret är helt enkelt att inte begränsa antalet rader som returneras av SELECT-satsen. Du kan fortfarande använda FIRST_ROWS_n-tipsen för att styra optimeraren att du inte kommer att ta tag i hela datamängden.

Programvaran som anropar SELECT bör endast välja de första n raderna. I PL/SQL skulle det vara

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. Infoga i MySQL från PHP (jQuery/AJAX)

  2. PLSQL :NY och :GAMMEL

  3. Kontrollera statusen för alla databaspostmeddelanden i SQL Server (T-SQL)

  4. Skapa en skalär användardefinierad funktion i SQL Server