我在两个不同的数据库服务器上执行以下查询:
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;
此查询在 Exadata 上返回与在其他服务器上不同的记录。在 Exadata 上,它首先选择第一行,然后进行排序。在另一台服务器上,它首先进行排序,然后返回第一行。
我们在两台服务器上都使用 Oracle 11g。
现在我们面临的问题是我们已经将数据库服务器升级到 Exadata,并且我们在代码库的很多地方都使用了这样的查询。那么我们能克服这个问题吗?
这个答案 是错误的,因为值 for
rownum
是在执行之前分配的order by
。下面是正确的,