http://psoug.org/reference/dbms_rowid.html
DBMS_ROWID包允许我们使用PL/SQL程序或SQL语句创建rowids和获取rowid的信息。例如可以通过其找到数据对象编号,数据文件编号,包含数据行的数据块编号及数据块中的数据行。该包从Oracle 8.X开始可用。
DBMS_ROWID的几个子函数程序:
1、ROWID_BLOCK_NUMBER函数(该函数返回输入ROWID的数据块编号)
语法:
DBMS_ROWID.ROWID_BLOCK_NUMBER(
返回值是number类型。
参数:
row_id:被转换的rowid。
ts_type_in:数据行所在表空间类型,默认是SMALLFILE,即小数据文件表空间。
举例:
SQL>
----------
2、ROWID_CREATE函数(返回一个基于单独行的rowid)
语法:
DBMS_ROWID.ROWID_CREATE (
参数:
rowid_type:rowid类型(restricted或者extended)。设置rowid_type为0时,代表restricted ROWID(此时,将忽略参数object_number):设置rowid_type为1时,代表extended ROWID。
object_number:数据对象编号(仅restricted类型rowid可用)。
relative_fno:所在数据文件编号。
block_number:该数据文件中的数据块编号。
row_number:在该块中的行编号。
举例:
创建restricted ROWID
SQL>
DBMS_ROWID.ROWID_C
------------------
000003E8.000D.000C
创建extended ROWID
SQL>
DBMS_ROWID.ROWID_C
------------------
AAACcPAAMAAAAPoAAN
3、ROWID_INFO过程(该过程返回一个ROWID的相关信息,包括类型和ROWID的一些其他部分,注意:这时一个存储过程,不能在SQL语句中使用)
语法:
DBMS_ROWID.ROWID_INFO (
参数:
rowid_in:ROWID to be interpreted. This determines if the ROWID is a restricted (0) or extended (1) ROWID.
ts_type_in:The type of the tablespace (bigfile/smallfile) to which the row belongs.
rowid_type:Returns type (restricted/extended).
object_number:Returns data object number (rowid_object_undefined for restricted).
relative_fno:Returns relative file number.
block_number:Returns block number in this file.
row_number:Returns row number in this block.
举例:
SQL> set serverout on
SQL> declare
ROWID:
Object#:
RelFile#:
Block#:
Row#:
PL/SQL procedure successfully completed.
4、ROWID_OBJECT函数(该函数返回扩展ROWID的数据对象编号,如果输入的ROWID类型为restricted,则该函数返回值为0)
语法:
DBMS_ROWID.ROWID_OBJECT (rowid_id IN ROWID)
举例:
SQL>
DBMS_ROWID.ROWID_OBJECT(ROWID)
------------------------------
5、ROWID_RELATIVE_FNO函数(该函数根据输入的ROWID值,返回其所在数据文件编号)
语法:
DBMS_ROWID.ROWID_RELATIVE_FNO (
举例:
SQL>
----------
5、ROWID_ROW_NUMBER函数(该函数根据输入的ROWID提取出行(row)号)
语法:
DBMS_ROWID.ROWID_ROW_NUMBER (row_id IN ROWID)
RETURN NUMBER;
举例:
SQL> select
----------
6、ROWID_TO_ABSOLUTE_FNO函数(从输入的ROWID中提取出其所在完全文件号)
语法:
DBMS_ROWID.ROWID_TO_ABSOLUTE_FNO (
举例:
SQL> select
DBMS_ROWID.ROWID_TO_ABSOLUTE_FNO(ROWID,'LIGLE','T1')
----------------------------------------------------
7、ROWID_TYPE函数(返回ROWID的类型,返回0代表restricted ROWID;返回1代表extended ROWID)
语法:
DBMS_ROWID.ROWID_TYPE (
举例:
SQL>
DBMS_ROWID.ROWID_TYPE(ROWID)
----------------------------