【发布时间】:2016-04-17 00:16:54
【问题描述】:
我有一个名为 points 的表。我执行了以下查询,并期望得到一个按字典顺序排序的 ROWID 列表,但这并没有发生。 Order by rowid 如何对行进行排序?
select rowid from points order by rowid
我有像下面这样的行
- AAAE6MAAFAAABiSAAA
- AAAE6MAAFAAABi+AAA
第二行在字典上小于第一行。那么,如果不是字典排序,那么排序标准是什么?
【问题讨论】:
-
它是一个伪列。没有排序标准,因此您不应依赖这些 ID。此外,例如,如果您移动桌子,这些 ID 可能会发生变化。 docs.oracle.com/cd/B19306_01/server.102/b14200/…
-
第二个断言并不完全正确。
2nd row is lexicographicaly smaller than first row.对于 oracle 数据库,它将取决于一些 NLS 数据库设置。 -
基本上你不应该使用
rowid来订购,我想不出任何可能的场景对rowid订购有用 -
当然,在某些情况下按 ROWID 排序很有用。如果您没有唯一键并且您仍然需要确定性顺序。出于同样的原因,Oracle 在非唯一索引内部按 ROWID 排序。