Oracle/SQL中ROWID的数据类型是什么?这个值是如何存储的?
下面的链接解释了ROWID的数据类型是什么-ROWID数据类型
ROWID被存储为一个伪列。
因此,十六进制字符串表示其表中某行的唯一地址。
ROWID(从Oracle8称为扩展ROWID,到Oracle7现在称为限制ROWID)存储/编码一行的物理位置。
(扩展)ROWID编码(以十六进制格式)以下字段:OBJID(行所属对象的唯一id)、FILENO(创建对象的TABLESPACE中的相对文件号)、BLOCKNO(文件中的相对块号)和ROWNUM(块中行的相对号)。
(受限的)ROWID只包含FILENO(数据库中的相对文件号)、BLOCKNO和ROWNUM(就像在外部的ROWID中一样),没有OBJID。
在任何给定的时间,ROWID都会对数据库中的行进行唯一编码(除了共享相同ROWID的集群故事)。ROWID可能会更改(由于数据库的重组),也可能被重新使用(例如,在删除和插入后,新行可能会重新使用ROWID)。此外,导出/导入表将为表重新分配新的ROWID。
请注意,在扩展的ROWID格式中,FILENO不一定是每个数据库唯一的,但由于扩展格式还包含OBJID(它唯一标识存储表对象段的表空间),我们可以找到一个唯一的文件。
BLOCKNO对于每个数据库文件是唯一的,ROWNUM对于每个数据库块是唯一的。
例外:索引组织的表-由于索引重组(叶块的移动),ROWID无法定位确切的块。
ROWID可能会因数据库重组操作而更改。