首页 > 编程知识 正文

oracle rownum,oracle rownum会变吗

时间:2023-05-03 05:18:34 阅读:108106 作者:2000

ROWID和UROWID数据类型

oracle使用ROWID数据类型存储数据库中每一行数据的地址(ROWID )。

*物理rowid[physical rowid] :普通表[ordinary table],即索引表[index-organized table]以外的数据表、簇表[ clusted ]

*逻辑rowid[logical rowid] :存储索引表中数据行的地址。

UROWID数据类型,也称为通用数据类型[universal rowid],同时支持物理rowid和逻辑rowid,并具有外观[foreign table],如通过网关访问的非oracle数据表

数据类型为UROWID的列可以存储各种类型的rowid。

要使用UROWID数据类型,compatible初始化参数必须设置为8.1或更高。

compatible角色:用于设置文件格式的兼容性。

1.ROWID虚拟列

oracle数据库中的每个表都包含名为ROWID的伪列[pseudo colum];

此列在执行select * from或describe语句时不显式,不占用数据表的存储空间

可以在SQL查询中将保留字ROWID用作列名来获取数据行的地址。

select rowid,last_name from employees;

用户不能使用insert或update语句设置rowid虚拟列的值或删除rowid。

oracle使用rowid虚拟列的rowid值创建索引。

rowid不保存在数据库中,也不是数据库数据

2 .物理rowid

物理rowid包含数据行的物理地址,因此用户只需访问各个数据块就可以检索行数据。

只要数据行存在,oracle就会确保其rowid保持不变。

非聚簇表[nonclustered table]中的每个数据行都有唯一的rowid,与该行的行片段[row piece]的物理地址相对应。 如果数据行通过多个行片段链接,则rowid对应于第一个行片段的物理地址。 对于群集表,同一数据块中不同表中的数据行可能具有相同的rowid。

将Rowid赋予数据行后,在使用Import/Export工具执行导入/导出操作之前,它不会更改。 用户提交包含删除数据行操作的事务后,插入后续事务中的新数据行可能会使用被删除数据行的rowid。

物理rowid数据类型有以下两种格式:

*扩展rowid[extended rowid] :支持与表空间相关的块地址,并允许您高效地在分区表和分区索引中搜索数据行。 它还可以有效地从非分区表和非分区索引中进行搜索。 在8i或更高版本的数据库中创建的表和索引使用扩展的rowid

*有限rowid [ restricted rowid ] :向后兼容Oracle 7或更低版本的数据库APP应用程序。

2.1扩展rowid

每个数据行的物理地址用64位编码,编码字符为a-z、a-z、0-9和/

例如:

SELECT ROWID,last _ namefromemployeeswheredepartment _ id=20;

您可以返回以下信息:

ROWID LAST_NAME

请参见---------------------------------------------------------

AAAAaoAATAAABrXAAA BORTINS

aaaaoataabrxaae ruggles

AAAAaoAATAAABrXAAG CHEN

aaaaoataabrxaan b lumberg

扩展rowid的格式分为4个段,OOOOOOFFFBBBBBBRRR :

* OOOOOO :数据对象编号[data object number]用于确定数据库段[database segment] (在本例中为AAAAao )。 同一数据段中的架构对象(如群集中的数据表)具有相同的数据对象编号。

* FFF :与表空间相关联的数据文件编号[datafile number]。 表示包含此行的数据文件(在本例中为AAT )。

* BBBBBB :包含数据行的数据块[data block] (在本例中为AAABrX )。 数据块编号与它所在的数据文件相关联,而不是与表空间相关联。 因此,具有相同数据块编号的两行数据可能位于同一表空间的不同数据文件中。

* RRR:数据块中的数据行[row]。

您可以从数据字典视图USER_OBJECTS、DBA_OBJECTS或ALL_OBJECTS中获取数据库对象的数据对象编号。 例如,以下查询返回SCOTT架构的employees表的数据对象编号。

select data _ object _ idfromdba _ objectswhereowner=' Scott ' and object _ name=' employes ';

用户可以使用DBMS_ROWID包从扩展的rowid中检索数据库对象信息,并在扩展格式和受限格式之间转换rowid。

2.2受限rowid

用二进制码形式表示各数据行物理地址;

对于查询,二进制有限rowid将转换为varchar2类型的十六进制格式,如下所示:

SELECT ROWID,last _ namefromemployeeswheredepartment _ id=30;

返回:

ROWID ENAME

-------------请参阅

00000DD5.0000.0001 KRISHNAN

00000DD5.0001.0001 ARBUCKLE

00000DD5.0002.0001 NGUYEN

受限rowid的VARCHAR2型十六进制表示分为三个部分,块.行.文件[block.row.file] :

*包含数据行的数据块[data block] (在此例中为DD5 )。 数据块编号与它所在的数据文件相关联,而不是与表空间相关联。 因此,具有相同数据块编号的两行数据可能位于同一表空间的不同数据文件中。

*数据行[row]在数据块中的位置。 在本例中,每行分别为0、1、2。 数据块中的行号始终从0开始。

*包含数据行的数据文件[datafile] (示例中的文件编号为1 )。 数据库中的数据文件编号始终从1开始,并且数据文件编号在一个数据库中是唯一的。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。