Oracle ROWID值

时间:2014-06-12 12:12:42

标签: oracle

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

SELECT *
  FROM TABLE1
 WHERE ROWID IN (SELECT MAX (ROWID) FROM TABLE1);

当我查看ROWID时,

值为AAAZA5eAFAAA7AAAA

MIN(ROWID)的其他一些价值。

这里如何评估此pseudocolumn?它还提到 Oracle数据库不保证这些列的值是有效的rowid .So ROWID值在模式中不一定是唯一的吗?

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

1 个答案:

答案 0 :(得分:5)

无法通过此方法获取表格中的最后一行。 rowid can change,这意味着它不一致,Oracle 永远不会保证它们是以任何顺序创建的。

获取表格最后一行的唯一可靠方法是to use the data in that table

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

select value
  from nls_session_parameters
 where parameter = 'NLS_SORT';

VALUE
------------------------------
BINARY

在我的情况下,它是二进制的,这意味着数据库正在执行二进制排序,以便确定任何一个值是否比另一个值“更大”。把它想象成ASCII table; A的十进制ASCII值为65,u的值为117.这表示A的排序高于u