Oracle ROWID
Oracle ROWID
ROWID为Oracle表的一个伪列,并不存储在数据库中,只是在执行查询的时候才计算它的值。
注:除了在同一聚簇中可能不唯一外,每条记录的rowid是唯一的
示例:查看rowid列
SQL> select rowid from emp;
ROWID
------------------
AAAR3sAAEAAAACXAAA
AAAR3sAAEAAAACXAAB
AAAR3sAAEAAAACXAAC
AAAR3sAAEAAAACXAAD
AAAR3sAAEAAAACXAAE
AAAR3sAAEAAAACXAAF
AAAR3sAAEAAAACXAAG
AAAR3sAAEAAAACXAAH
AAAR3sAAEAAAACXAAI
AAAR3sAAEAAAACXAAJ
AAAR3sAAEAAAACXAAK
AAAR3sAAEAAAACXAAL
AAAR3sAAEAAAACXAAM
AAAR3sAAEAAAACXAAN
AAAR3sAAEAAAACXAAO
已选择15行。
rowid包含如下内容:
①:对象所在的数据文件号
②:对象所在的块号
③:对象所在行在块内的位置
④:对象号
Oracle正是根据这些内容找到相应的数据的。
可以通过dbms_rowid包把rowid转换成易懂的内容。
示例1:看文件号
已选择15行。
SQL> select ROWID,DBMS_ROWID.ROWID_RELATIVE_FNO(rowid)file_id from emp;
ROWID FILE_ID
------------------ ----------
AAAR3sAAEAAAACXAAA 4
AAAR3sAAEAAAACXAAB 4
AAAR3sAAEAAAACXAAC 4
AAAR3sAAEAAAACXAAD 4
AAAR3sAAEAAAACXAAE 4
AAAR3sAAEAAAACXAAF 4
AAAR3sAAEAAAACXAAG 4
AAAR3sAAEAAAACXAAH 4
AAAR3sAAEAAAACXAAI 4
AAAR3sAAEAAAACXAAJ 4
AAAR3sAAEAAAACXAAK 4
AAAR3sAAEAAAACXAAL 4
AAAR3sAAEAAAACXAAM 4
AAAR3sAAEAAAACXAAN 4
AAAR3sAAEAAAACXAAO 4
已选择15行。