首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >为什么Oracle使用fetch更改了rowid?

为什么Oracle使用fetch更改了rowid?
EN

Stack Overflow用户
提问于 2019-05-30 07:41:10
回答 1查看 190关注 0票数 0

我有一个类似这样的查询:

代码语言:javascript
复制
select w.rowid, w.waclogin
  from tableA w, tableB wa, tableC a
 where wa.alucod = a.alucod
   and w.waclogin = wa.waclogin
   and a.cpf = '31808013875'
   and rownum <= 1;

结果是:

代码语言:javascript
复制
ROWID               WACLOGIN
AAA0CEAHSAABE07ABA  31808013875

但是当我使用fetch (为了提高性能)时,返回的rowid是不同的:

代码语言:javascript
复制
select w.rowid, w.waclogin
  from tableA w, tableB wa, tableC a
 where wa.alucod = a.alucod
   and w.waclogin = wa.waclogin
   and a.cpf = '31808013875'
 fetch first row only;

结果如下:

代码语言:javascript
复制
ROWID               WACLOGIN
AAA0DMAHaAAA+ZcAAX  31808013875

为什么fetch会改变rowid?对我来说,这是没有意义的。

更新

使用fetch时,返回的行id来自表B,而不是表A。

EN

回答 1

Stack Overflow用户

发布于 2019-05-30 07:52:35

tableA中有两行具有相同的wacLogin值(但明显不同的rowID值)。这两个查询都没有指定order by,因此返回哪一行是任意的。据推测,这两个查询使用的查询计划略有不同,因此每个查询返回不同的任意行。当然,明天,如果查询计划或表的物理组织发生变化,任何一个或两个查询都可能开始返回不同的任意行。如果希望在两种情况下都返回相同的行,则需要使用order by子句对结果进行唯一排序,从而使两个查询都具有确定性。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56369867

复制
相关文章

相似问题

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