Oracle / SQL中ROWID的数据类型是什么?这个值是如何存储的?
答案 0 :(得分:5)
以下链接说明了ROWID的数据类型是什么 - ROWID data type
ROWID存储为psuedocolumn。
答案 1 :(得分:1)
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可能会发生变化。