ORACLE数据库中的ROWID

ORACLE数据库中的ROWID,第1张

我们可能对oracle的rowid的使用并不陌生 不过 如果仔细分析一下 发现其还是有些知识点 rowid是一个伪列 是用来确保表中行的唯一性 它并不能指示出行的物理位置 但可以用来定位行 rowid是存储在索引中的一组既定的值(当行确定后) 我们可以像表中普通的列一样将它选出来 利用rowid是访问表中一行的最快方式 rowid需要 个字节来存储 显示为 位的字符串 rowid的组成结构为 data object number( 位字符串)+relative file number( 位字符串)+block number( 位字符串)+row number( 位字符串) 如 AAAADeAABAAAAZSAAA 我们可以借助oracle提供的包dbms_rowid 来对rowid进行解析从而获取关于行的相关信息 bossdb SQL>select rowid dbms_rowid rowid_object(rowid) obj_id dbms_rowid rowid_relative_fno(rowid) df# dbms_rowid rowid_block_number(rowid) blknum dbms_rowid rowid_row_number(rowid) rowno from p_test where rownum<ROWID OBJ_ID DF# BLKNUM ROWNO AAAQ+tAANAAAC SAAA AAAQ+tAANAAAC SAAB AAAQ+tAANAAAC SAAC AAAQ+tAANAAAC SAAD 我们可以看到 通过rowid_row_number得到的行号是从 开始的 这是和rownum伪列的一个不同之处 我猜测rowid_row_number在求行号的时候是计算首行的偏移量 一般来说 当表中的行确定后 rowid就不会发生变化 但当如下情况发生时 rowid将发生改变 对一个表做表空间的移动后 对一个表进行了EXP/IMP后 lishixinzhi/Article/program/Oracle/201311/17378

ROWID是数据的详细地址,通过rowid,oracle可以快速的定位某行具体的数据的位置。

ROWID可以分为物理rowid和逻辑rowid两种。普通的堆表中的rowid是物理rowid,索引组织表(IOT)的rowid是逻辑rowid。oracle提供了一种urowid的数据类型,同时支持物理和逻辑rowid。

物理rowid又分为扩展rowid(extended rowid)和限制rowid(restricted rowid)两种格式。限制rowid主要是oracle7以前的rowid格式,现在已经不再使用,保留该类型只是为了兼容性。

1.创建一临时表

create table test_rowid (id number, row_id rowid)

2.插入一行记录

insert into test_rowid values(1,null)

3.修改刚插入的记录

update test_rowid set row_id = rowid where id = 1

4.查看rowid

select rowid,row_id from test_rowid


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/sjk/9565703.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-29
下一篇 2023-04-29

发表评论

登录后才能评论

评论列表(0条)

保存