sql >> Base de Datos >  >> RDS >> Oracle

Comportamiento de Oracle rownum con función mod

ROWNUM no se asigna hasta que consulta, por lo que no podrá usarlo en un WHERE cláusula como esa.

Puede hacer lo siguiente:

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

El ROWNUM es la posición de la fila en el conjunto de resultados y se evalúa después de seleccionar los registros.

Estos tipos de consultas nunca funcionarán:

WHERE ROWNUM > x
WHERE ROWNUM BETWEEN x AND y

Pero esto funcionará

WHERE ROWNUM < x

Ya que desea evaluar el rownum con el mod función no funcionará porque el rownum no está disponible en ese momento. Es por eso que tendría que colocarlo en una subconsulta para usar el mod función.