sql >> Database teknologi >  >> RDS >> Sqlserver

Tving Oracle til at returnere TOP N rækker med SKIP LÅST

"Ud fra det, jeg har set, anvender Oracle WHERE-prædikatet, før det bestemmer, hvilke rækker der skal springes over."

Jep. Det er den eneste mulige måde. Du kan ikke springe en række over fra et resultatsæt, før du har bestemt resultatsættet.

Svaret er simpelthen ikke at begrænse antallet af rækker, der returneres af SELECT-sætningen. Du kan stadig bruge FIRST_ROWS_n-tipsene til at instruere optimeringsværktøjet om, at du ikke får fat i det fulde datasæt.

Softwaren, der kalder SELECT, bør kun vælge de første n rækker. I PL/SQL ville det være

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. MySQL - ignorer indsættelsesfejl:dobbelt indtastning

  2. Hvordan slår jeg Oracle-adgangskodeudløb fra?

  3. Husk RAC-forekomster i Perf Tools

  4. Brugerkontostyring, roller, tilladelser, autentificering PHP og MySQL