菜单 学习猿地 - LMONKEY

VIP

开通学习猿地VIP

尊享10项VIP特权 持续新增

知识通关挑战

打卡带练!告别无效练习

接私单赚外块

VIP优先接,累计金额超百万

学习猿地私房课免费学

大厂实战课仅对VIP开放

你的一对一导师

每月可免费咨询大牛30次

领取更多软件工程师实用特权

入驻
118
0

ROWID伪列

原创
05/13 14:22
阅读数 59698

ROWID伪列概念:

  在数据表中每一行所保存的记录,oracle会为每条记录分配一个唯一的地址编号,这个编号就是通过ROWID表示的。

  所有的数据都利用ROWID进行定位。

 

观察rowid的存在

 

SQL> select rowid,deptno,dname,loc from dept;

ROWID               DEPTNO DNAME         LOC
------------------ ---------- -------------- -------------
AAAR3vAAEAAAACHAAA       10 ACCOUNTING     NEW YORK
AAAR3vAAEAAAACHAAB       20 RESEARCH         DALLAS
AAAR3vAAEAAAACHAAC       30 SALES         CHICAGO
AAAR3vAAEAAAACHAAD       40 OPERATIONS     BOSTON

 

  以deptno为10的rowid为例:

  •   数据对象号:AAAR3v
  •   相对文件号:AAE
  •   数据块号:AAAACH
  •   数据行号: AAA

通过函数定位出rowid的映射位置:

  

select rowid,
       dbms_rowid.rowid_object(rowid) 数据对象号,
       dbms_rowid.rowid_relative_fno(rowid) 相对文件号,
       dbms_rowid.rowid_block_number(rowid) 数据块号,
       dbms_rowid.rowid_row_number(rowid) 数据行号,
       deptno,
       dname,
       loc
  from dept;

结果:

 

 

发表评论

0/200
118 点赞
0 评论
收藏