Rowid Datatypes(Rowid的几种数据类型)
数据库中的每一行都有一个地址。行地址在oracle数据库中有两种形式:rowid datatype、unrowid datatype。
rowid datatype
Oracle数据库本地的堆组织表中的行的地址称为rowid。您可以通过查询伪列ROWID来获取行地址。这个伪列的值是表示每行的地址的字符串。这些字符串的数据类型为ROWID。您还可以创建含有ROWID数据类型的实际列的表和集群。Oracle数据库不保证这些列的值是有效的rowid。
Refer to
Chapter 3, "Pseudocolumns" for more information on the ROWID pseudocolumn.
注意:从Oracle8开始,Oracle SQL包含了rowid的扩展格式,以有效地支持分区表和索引以及与表空间相关的数据块地址,而不会模糊。如果您正在运行版本7的数据库并且您打算升级,请使用DBMS_ROWID软件包将数据中的rowid迁移到扩展格式。
Refer to Oracle Database PL/SQL Packages and Types
Reference for information on DBMS_ROWID and to Oracle Database
Upgrade Guide for information on upgrading from Oracle7.
Rowid包含以下信息:
1.包含该行的数据文件的数据块。该字符串的长度取决于您的操作系统。
2.数据块中的行。
3.包含该行的数据库文件。第一个数据文件的编号为1。该字符串的长度取决于您的操作系统。
4.数据对象编号,它是分配给每个数据库段的标识号。您可以从数据字典视图USER_OBJECTS,DBA_OBJECTS和ALL_OBJECTS中检索数据对象编号。
Rowid基于base64编码。可以包含字符A-Z,a-z,0-9以及加号(+)和正斜杠(/)。Rowid不可以直接使用。您可以使用提供的包DBMS_ROWID解释rowid内容。包函数提取并提供上面列出的四个rowid元素的信息。
See Also: Oracle Database PL/SQL Packages and Types Reference for
information on the functions available with the DBMS_ROWID package
and how to use them
UROWID Datatype
某些表的行的地址不是物理的或永久的,也不是由Oracle数据库生成的。例如,索引组织表的行地址存储在可以移动的索引叶中。外部表的Rowid(例如通过网关访问的DB2表)不是标准的Oracle rowid。
Oracle使用通用rowid(urowids)来存储索引组织和外部表的地址。索引组织的表具有逻辑urowids,外部表具有外部urowid。这两种类型的urowid都存储在ROWID伪列中(堆组织表的物理rowid也是这样)。Oracle根据表的主键创建逻辑rowid。只要主键不更改,逻辑rowid就不会更改。索引组织表的ROWID伪列具有UROWID的数据类型。您可以像堆组织表的ROWID伪列(使用SELECT ... ROWID语句)访问这个伪列。如果要存储索引组织表的rowid,则可以为表定义一个类型为UROWID的列,并将ROWID伪列的值检索到该列中。
注意:
堆组织的表具有物理rowid。Oracle不建议您为堆组织的表指定一列数据类型UROWID。