sql >> Databasteknik >  >> RDS >> Oracle

Oracle rownum beteende med mod funktion

ROWNUM tilldelas inte förrän du frågar, så du kommer inte att kunna använda den i en WHERE sådan klausul.

Du kan göra följande:

SELECT COUNT(*) 
FROM
(
  select v1, v2, rownum rn
  from Foo 
) f
WHERE mod(rn,2) = 0;

ROWNUM är radens position i resultatuppsättningen och den utvärderas efter att posterna har valts.

Dessa typer av frågor kommer aldrig att fungera:

WHERE ROWNUM > x
WHERE ROWNUM BETWEEN x AND y

Men det här kommer att fungera

WHERE ROWNUM < x

Eftersom du vill utvärdera rownum med mod funktion kommer det inte att fungera eftersom rownum är inte tillgänglig vid den tidpunkten. Det är därför du måste placera den i en underfråga för att använda mod fungera.



  1. Fel Cast-konvertering av SQL

  2. Ska jag koppla från() om jag använder Apache::DBIs connect_cached()?

  3. anropar en mysql-funktion som returnerar varchar i viloläge

  4. Maximera databasfrågeeffektivitet för MySQL - del ett