Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Comportamento do Oracle rownum com função mod


ROWNUM não é atribuído até você consultar, então você não poderá usá-lo em um WHERE cláusula assim.

Você pode fazer o seguinte:
SELECT COUNT(*) 
FROM
(
  select v1, v2, rownum rn
  from Foo 
) f
WHERE mod(rn,2) = 0;

O ROWNUM é a posição da linha no conjunto de resultados e é avaliada após a seleção dos registros.

Esses tipos de consultas nunca funcionarão:
WHERE ROWNUM > x
WHERE ROWNUM BETWEEN x AND y

Mas isso vai funcionar
WHERE ROWNUM < x

Como você deseja avaliar o rownum com o mod não funcionará porque o rownum não está disponível naquele momento. É por isso que você teria que colocá-lo em uma subconsulta para usar o mod função.