首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Oracle Exadata服务器上带有order和rownum的查询的奇怪行为

Oracle Exadata服务器上带有order和rownum的查询的奇怪行为
EN

Database Administration用户
提问于 2013-02-22 07:06:45
回答 1查看 7.6K关注 0票数 1

我在两个不同的数据库服务器上执行以下查询:

代码语言:javascript
复制
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,并且在代码库中的许多地方都使用了这样的查询。那么,我们能否克服这个问题呢?

EN

回答 1

Database Administration用户

回答已采纳

发布于 2015-08-27 07:10:21

这个答案是错误的,因为rownum的值是在执行order by之前分配的。

下面是正确的答案,

代码语言:javascript
复制
SELECT start_date,  
       end_date,  
       resort_id,  
       ROWNUM  
FROM   (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  
       ORDER BY start_date DESC
      )  
WHERE  ROWNUM = 1
票数 4
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/35221

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档