Oracle ROWID值

Naa*_*aaN 1 oracle

我试图使用以下查询从表中获取最后一条记录。

SELECT *
  FROM TABLE1
 WHERE ROWID IN (SELECT MAX (ROWID) FROM TABLE1);
Run Code Online (Sandbox Code Playgroud)

当我检查时ROWID

值是 AAAZA5eAFAAA7AAAA

还有一些其他的价值MIN(ROWID)

pseudocolumn这里如何对此进行评估?还提到了Oracle数据库不保证此类列的值是有效的rowid。因此,ROWID值在架构内不一定是唯一的吗?

根据文档: 数据库中的每一行都有一个地址。您可以通过查询伪列ROWID来检查行地址。该伪列的值是代表每行地址的字符串。这些字符串的数据类型为ROWID。您还可以创建包含具有ROWID数据类型的实际列的表和集群。Oracle数据库不保证此类列的值是有效的rowid。

Ben*_*Ben 5

无法通过此方法获得表中的最后一行。rowid 可以更改,这意味着不一致,并且Oracle 绝不保证以任何顺序创建它们。

获得一个表的最后一排的可靠的方法是使用数据在该表中

要实际回答您的问题,将以与您的NLS_SORT参数一致的方式评估伪列:

select value
  from nls_session_parameters
 where parameter = 'NLS_SORT';

VALUE
------------------------------
BINARY
Run Code Online (Sandbox Code Playgroud)

在我的情况下,它是二进制的,这意味着数据库正在执行二进制排序,以便确定一个值是否比另一个值“更大”。认为它就像是ASCII表一样;的十进制ASCII值为A65,值为u117。这表示在A上面排序u