逐行ID如何在Oracle中运行?

Far*_*hid 1 sql oracle rowid

我有一张叫做积分的桌子.我执行了以下查询,并期望一个列表的词典排序列表的ROWID,但没有发生.order by rowid如何对行进行排序?

select rowid from points order by rowid
Run Code Online (Sandbox Code Playgroud)

我有像下面这样的行

  1. AAAE6MAAFAAABiSAAA
  2. AAAE6MAAFAAABi + AAA

第二行的词典比第一行小.那么,如果不是lecxicographical排序,那么排序标准是什么?

a_h*_*ame 9

为什么您看到的只是用于显示目的的表示.

实际的rowid包含有关数据块的二进制信息,块中的行,块所在的文件以及表的内部对象id(有关详细信息,请参阅手册)

当您使用order by rowidOracle时,根据该(内部)信息对行进行排序,而不是基于"字符串表示".

如果您将查询更改为:

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
Run Code Online (Sandbox Code Playgroud)

你很可能会看到rownumber排序背后的逻辑.

请注意,值dbms_rowid.rowid_object()始终相同.如果你的表中只有两行,那么两者最有可能也有相同的值rowid_block_number()