Estou executando a seguinte consulta em dois servidores de banco de dados diferentes:
SELECT start_date,
end_date,
resort_id
FROM employee_activity
WHERE employee_id = 27
AND start_date < to_date('2012-11-09', 'YYYY-MM-DD')
AND is_overridden = 1
AND ROWNUM = 1
ORDER BY start_date DESC;
Essa consulta retorna registros diferentes no Exadata e no outro servidor. No Exadata, ele primeiro seleciona a primeira linha e depois faz a ordenação. No outro servidor, ele primeiro faz a ordenação e depois retorna a primeira linha.
Estamos usando o Oracle 11g em ambos os servidores.
Agora, o problema que estamos enfrentando é que atualizamos nossos servidores de banco de dados para Exadata e usamos essas consultas em vários lugares em nossa base de código. Então, podemos superar esse problema?
Esta resposta está errada, porque o valor para
rownum
é atribuído antes deorder by
ser executado.Abaixo está o correto,