Oracle ROWID.doc_第1页
Oracle ROWID.doc_第2页
Oracle ROWID.doc_第3页
Oracle ROWID.doc_第4页
Oracle ROWID.doc_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Oracle ROWID我们可能对oracle的rowid的使用并不陌生,不过,如果仔细分析一下,发现其还是有些知识点。 1、rowid是一个伪列,是用来确保表中行的唯一性,它并不能指示出行的物理位置,但可以用来定位行。 2、rowid是存储在索引中的一组既定的值(当行确定后)。我们可以像表中普通的列一样将它选出来。 3、利用rowid是访问表中一行的最快方式。 4、rowid需要10个字节来存储,显示为18位的字符串。 rowid的组成结构为: data object number(6位字符串)+relative file number(3位字符串)+block number(6位字符串)+row number(3位字符串),如:AAAADeAABAAAAZSAAA 5、我们可以借助oracle提供的包dbms_rowid,来对rowid进行解析从而获取关于行的相关信息: bossdb-SQLselect 2 rowid, 3 dbms_rowid.rowid_object(rowid) obj_id, 4 dbms_rowid.rowid_relative_fno(rowid) df#, 5 dbms_rowid.rowid_block_number(rowid) blknum, 6 dbms_rowid.rowid_row_number(rowid) rowno 7 from p_test where rownum select dbms_rowid.rowid_block_number(rowid) block from test; block - 23722 2 DBMS_ROWID.ROWID_CREATE:创建并返回一个基于单独行的rowid,创建的rowid类型是RESTRICTED或者是EXTENDED,这种功能一般都是用于测试目的,因为只有oracle才能创建一个合法的rowid指向数据。 定义如下: function dbms_rowid.rowid_create (rowid_type in number ,object_number in number ,relative_fno in number ,block_number in number ,row_number in number) return rowid 例子: 创建一个restricted rowid: SQL select dbms_rowid.rowid_create(0, 6877,1,23722,0) from dual; DBMS_ROWID.ROWID_C - 00005CAA.0000.0001 创建一个extended rowid: SQL select dbms_rowid.rowid_create(1, 6877,1,23722,0) from dual; DBMS_ROWID.ROWID_C - AAABrdAABAAAFyqAAA 3 DBMS_ROWID.ROWID_INFO: 返回一个单独组件的一个指定的rowid,它只能用于PL/SQL,而不能用于sql语句中。 定义如下: procedure dbms_rowid.rowid_info (rowid_in in rowid ,rowid_type out number ,object_number out number ,relative_fno out number ,block_number out number ,row_number out number) 例子: SQL set serverout on SQL set echo on SQL declare 2 my_rowid rowid; 3 rowid_type number; 4 object_number number; 5 relative_fno number; 6 block_number number; 7 row_number number; 8 begin 9 my_rowid :=dbms_rowid.rowid_create(1, 6877,1,23722,0); 10 dbms_rowid.rowid_info(my_rowid, rowid_type, object_number, 11 relative_fno, block_number, row_number); 12 dbms_output.put_line(ROWID: | my_rowid); 13 dbms_output.put_line(Object#: | object_number); 14 dbms_output.put_line(RelFile#: | relative_fno); 15 dbms_output.put_line(Block#: | block_number); 16 dbms_output.put_line(Row#: | row_number); 17 end; 18 / ROWID: AAABrdAABAAAFyqAAA Object#: 6877 RelFile#: 1 Block#: 23722 Row#: 0 PL/SQL 过程已成功完成。 4.DBMS_ROWID.ROWID_OBJECT:返回一个rowid的对象号。如果是restricted 的rowid,则返回0。 定义如下: function dbms_rowid.rowid_object (row_id in rowid) return number 例子: SQL select dbms_rowid.rowid_object(rowid) OBJECT from test; OBJECT - 6877 SQL select dbms_rowid.rowid_object(dbms_rowid.rowid_to_restricted(rowid,0) OBJECT from test; OBJECT - 0 5 DBMS_ROWID.ROWID_RELATIVE_FNO: 返回一个rowid的相对文件号。 定义如下: function dbms_rowid.rowid_relative_fno (row_id in rowid) return number 例子: SQL select dbms_rowid.rowid_relative_fno(rowid) relative fno from test; relative fno - 1 6 DBMS_ROWID.ROWID_ROW_NUMBER:返回一个rowid的行号。(从零开始) 定义如下: function dbms_rowid.rowid_row_number (row_id in rowid) return number 例子: SQL select dbms_rowid.rowid_row_number(rowid) row from test; row - 0 7 DBMS_ROWID.ROWID_TO_ABSOLUTE_FNO:返回一个rowid的完全文件号。 定义如下: function dbms_rowid.rowid_to_absolute_fno (rowid in rowid ,schema_name in varchar2 ,object_name in varchar2) return number 例子: SQL select dbms_rowid.rowid_to_absolute_fno (rowid, SYS, TEST) absolute fno from test; absolute fno - 1 8 DBMS_ROWID.ROWID_TO_EXTENDED: 转换一个restricted rowid为一个extended rowid.如果原始的rowid存储在列中,转换的 就是internal类型;如果原始的rowid是以字符串形式存储的,那转换的就是external类型。 定义如下: function dbms_rowid.rowid_to_extended (old_rowid in rowid ,schema_name in varchar2 ,object_name in varchar2 ,conversion_type in integer) return rowid 例子: 转换restricted internal rowid为extended格式 SQLselect dbms_rowid.rowid_to_extended (dbms_rowid.rowid_to_restricted(rowid,0),SYS,TEST,0) extended rowid from test; extended rowid - AAABrdAABAAAFyqAAA 转换restricted external rowid为extended格式 SQL select dbms_rowid.rowid_to_extended (00005CAA.0000.0001,SYS,TEST,1) from dual; DBMS_ROWID.ROWID_T - AAABrdAABAAAFyqAAA 如果参数中的SCHEMA和OBJECT为null,则默认是当前的对象 SQLselect dbms_rowid.rowid_to_extended (dbms_rowid.rowid_to_restricted(rowid,0),null,nu

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论