Home >Database >Mysql Tutorial >Oracle 10g 中的ROWID详解

Oracle 10g 中的ROWID详解

WBOY
WBOYOriginal
2016-06-07 16:48:50937browse

Oracle 10g 中的ROWID详解,Oracle的ROWID用来唯一标识表中的一条记录,是这条数据在数据库中存放的物理地址。

首先使用select * from v$version; 查询Oracle数据库当前的版本
 
SQL> select * from v$version;
 
BANNER
 ----------------------------------------------------------------
 Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - Prod
 PL/SQL Release 10.2.0.3.0 - Production
 CORE    10.2.0.3.0      Production
 TNS for 32-bit Windows: Version 10.2.0.3.0 - Production
 NLSRTL Version 10.2.0.3.0 - Production
 
我们首先执行一条查询:
 
SQL> select rowid,employee_id,first_name,last_name,job_id
  2  from employees
  3  where rownum 
ROWID              EMPLOYEE_ID FIRST_NAME          LAST_NAME                JOB_ID
 ------------------ ----------- -------------------- ------------------------- ----------
 AAAMieAAFAAAABUAAA        198 Donald                OConnell                  SH_CLERK
 AAAMieAAFAAAABUAAB        199 Douglas              Grant                    SH_CLERK
 AAAMieAAFAAAABUAAC        200 Jennifer              Whalen                    AD_ASST
 AAAMieAAFAAAABUAAD        201 Michael              Hartstein                MK_MAN
 AAAMieAAFAAAABUAAE        202 Pat                    Fay                      MK_REP
 AAAMieAAFAAAABUAAF        203 Susan                Mavris                    HR_REP
 AAAMieAAFAAAABUAAG        204 Hermann          Baer                      PR_REP
 AAAMieAAFAAAABUAAH        205 Shelley              Higgins                  AC_MGR
 AAAMieAAFAAAABUAAI        206 William              Gietz                    AC_ACCOUNT
 AAAMieAAFAAAABYAAA        100 Steven              King                      AD_PRES
 
已选择10行。
 
可以看到查询结果中所显示的ROWID的值。

Oracle rowid

Oracle入门基础教程:rowid详解

Oracle 中ROWNUM用法总结,ROWNUM 与 rowid 区别

rowid走索引之嫌疑犯抓获

Oracle利用rownum和rowid分页
 

Oracle的ROWID用来唯一标识表中的一条记录,是这条数据在数据库中存放的物理地址。
 Oracle的ROWID伪列的值并不存储在数据库中。Oracle在执行查询时计算其值。Oracle的物理扩展ROWID有18位,每位采用64位编码,分别用A~Z、a~z、0~9、+、/共64个字符表示。A表示0,B表示1,……Z表示25,a表示26,……z表示51,0表示52,……,9表示61,+表示62,/表示63。
 通过DBMS_ROWID包可以把ROWID值转换成有意义的信息。
 
SQL> select dbms_rowid.rowid_relative_fno(rowid),employee_id
  2  from employees
  3  where employee_id=200;
 
DBMS_ROWID.ROWID_RELATIVE_FNO(ROWID) EMPLOYEE_ID
 ------------------------------------ -----------
                                    5        200
 
执行下面的查询,可以获得该数据存储的物理数据文件的信息:
 
SQL> col tablespace_name format a20;
 SQL> col file_name format a80;
 SQL> select file_name, tablespace_name from dba_data_files where relative_fno = 5;
 
FILE_NAME                                                                        TABLESPACE_NAME
 -------------------------------------------------------------------------------- --------------------
 E:\ORACLE\PRODUCT\10.2.0\ORADATA\KEYMENDB\EXAMPLE01.DBF                          EXAMPLE
 

在SQL语句的SELECT和WHERE子句中都可以使用ROWID的值。大多数情况下,,ROWID唯一标识一行。然而,行有可能存储在同一个聚簇中的不同表中,因此包含具有相同ROWID的行。
 
理解ROWID首先需要理解它的两个方面:ROWID的特性和ROWID的结构。
 

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn