我有一张叫做积分的桌子.我执行了以下查询,并期望一个列表的词典排序列表的ROWID,但没有发生.order by rowid如何对行进行排序?
select rowid from points order by rowid
我有像下面这样的行
AAAE6MAAFAAABiSAAA
AAAE6MAAFAAABi + AAA
第二行的词典比第一行小.那么,如果不是lecxicographical排序,那么排序标准是什么?
为什么您看到的只是用于显示目的的表示.
实际的rowid包含有关数据块的二进制信息,块中的行,块所在的文件以及表的内部对象id(有关详细信息,请参阅手册)
当您使用order by rowid
Oracle时,根据该(内部)信息对行进行排序,而不是基于"字符串表示".
如果您将查询更改为:
select rowid, dbms_rowid.rowid_relative_fno(rowid) as rel_fno, dbms_rowid.rowid_row_number(rowid) as row_num, dbms_rowid.rowid_block_number(rowid) as block_num, dbms_rowid.rowid_object(rowid) from points order by rowid
你很可能会看到rownumber排序背后的逻辑.
请注意,值dbms_rowid.rowid_object()
始终相同.如果你的表中只有两行,那么两者最有可能也有相同的值rowid_block_number()