网站首页
JSP空间
动态资讯
开源项目
技术文档
资源下载
J2EE资源
客户论坛
在线支付
 
  技术文档>>JAVA>>新手入门>>基础入门>查看文档  
  关于扩展(extended)的rowid的一些内容     
  文章作者:未知  文章来源:水木森林  
  查看:112次  录入:管理员--2007-11-17  
 
  1.    rowid的介绍
  先对rowid有个感官认识:
  
  sql> select rowid from bruce_test where rownum<2;
  
  rowid
  ------------------ ----------
  aaabnlaafaaaaapaaa
  
  rowid的格式如下:
  
  数据对象编号    文件编号    块编号      行编号
  
  oooooo       fff        bbbbbb rrr
  
  我们可以看出,从上面的rowid可以得知:
  
  aaabnl 是数据对象编号
  
  aaf是相关文件编号
  
  aaaaap是块编号
  
  aaa 是行编号
  
  怎么依据这些编号得到具体的十进制的编码值呢,这是经常遇到的问题。这里需要明白rowid的是基于64位编码的18个字符显示(数据对象编号(6) +文件编号(3) +块编号(6)+    行编号(3)=18位),其中
  
  a-z <==> 0 - 25 (26)
  a-z <==> 26 - 51 (26)
  0-9 <==> 52 - 61 (10)
  +/ <==> 62 - 63 (2)
  
  共64位,明白这个后,就可以计算出10进制的编码值,计算公式如下:
  
  d * (b ^ p)
  
  其中:b就是基数,这里就是64,p就是从右到左,已0开始的位置数
  
  比如:上面的例子
  
  文件号aaf,具体的计算应该是:
  
  5*(64^0)=5;
  
  0*(64^1)=0;
  
  0*(64^2)=0;
  
  文件号就是0+0+5=5
  
  刚才提到的是rowid的显示方式:基于64位编码的18个字符显示,其实rowid的存储方式是:10 个字节即80位存储,其中数据对象编号需要32 位,相关文件编号需要10 位,块编号需要22,位行编号需要16 位,由此,我们可以得出:
  
  32bit的object number,每个数据库最多有4g个对象
  
  10bit的file number,每个对象最多有1022个文件(2个文件预留)
  
  22bit的block number,每个文件最多有4m个block
  
  16bit的row number,每个block最多有64k个rows
  
  2.    rowid相关的有用的sql
  最简单的基于rowid的显示方式得到的响应的64位编码对应值的sql:
  
  select rowid ,
  
  substr(rowid,1,6) "object",
  
  substr(rowid,7,3) "file",
  
  substr(rowid,10,6) "block",
  
  substr(rowid,16,3) "row"
  
  from tablename;
  
  owid       object    file  block    row
  
  ------------------ ------------ ------ ------------ ------
  
  aaabc4aadaaagluaaa aaabc4    aad  aaaglu    aaa
  
  aaabc4aadaaagluaab aaabc4    aad  aaaglu    aab
  
  aaabc4aadaaagluaac aaabc4    aad  aaaglu    aac
  
  aaabc4aadaaagluaad aaabc4    aad  aaaglu    aad
  
  aaabc4aadaaagluaae aaabc4    aad  aaaglu    aae
  
  通过dbms_rowid这个包,可以直接的得到具体的rowid包含的信息:
  
  select dbms_rowid.rowid_object(rowid) object_id, dbms_rowid.rowid_relative_fno(rowid) file_id,
  dbms_rowid.rowid_block_number(rowid) block_id ,dbms_rowid.rowid_row_number(rowid) num from bruce_t where rownum<5;
  
  object_id  file_id  block_id    num
  
  ---------- ---------- ---------- ----------
  
     5944     3   25300     0
  
     5944     3   25300     1
  
     5944     3   25300     2
  
     5944     3   25300     3
  
  一些使用rowid的函数
  rowidtochar(rowid) :将rowid转换成string
  chartorowid('rowid_string') :将string转换成rowid
  
   另外,就是自己写的一些函数:(下面的函数是网友eygle提供)
  
  create or replace function get_rowid
  
  (l_rowid in varchar2)
  
  return varchar2
  
  is
  
  ls_my_rowid   varchar2(200);     
  
  rowid_type   number;     
  
  object_number   number;     
  
  relative_fno   number;     
  
  block_number   number;     
  
  row_number   number; 
  
  begin
  
   dbms_rowid.rowid_info(l_rowid,rowid_type,object_number,relative_fno, block_number, row_number);     
  
   ls_my_rowid := 'object# is   :'||to_char(object_number)||chr(10)||
  
      'relative_fno is :'||to_char(relative_fno)||chr(10)||
  
      'block number is :'||to_char(block_number)||chr(10)||
  
      'row number is  :'||to_char(row_number);
  
   return ls_my_rowid ;
  
  end;     
  
  /
  
  应用上面的函数如下:
  
  sql> select get_rowid(rowid), name from bruce_t;
  
  get_rowid(rowid)                                 name
  
  -------------------------------------------------------------------------------- --------------------------------
  
  object# is   :5944                           brucelau
  
  relative_fno is :3                               
  
  block number is :25300                             
  
  row number is  :0                               
  
  object# is   :5944                           mabeltang
  
  relative_fno is :3                               
  
  block number is :25300                             
  
  row number is  :1
 
 
上一篇: jgraph 经典常见问题解答 (faq)    下一篇: java中的17种常用正则表达式归纳
  相关文档
使用annotation设计持久层 11-17
在jse环境使用hibernate entitymanger 11-17
用j2se1.4进行internet安全编程 11-17
java对象转为javastring的几种常用方法 11-17
java初学问题实录(四) 11-17
用jbuilder2005开发spring mvc应用 11-17
数据库:jdbmonitor在多数据源中的问题 03-06
两种java容器类list和set分析 11-16
j2ee综合--java语言不一定就跨平台 03-03
swing读书笔记事件处理 11-17
fckeditor在线编辑器的使用 11-17
java基础知识——jni入门介绍(下) 11-17
一个经典的java applet时钟程序(一) 11-17
让java说话-用java实现语音引擎 11-16
在netbeans ide下开发struts应用 11-17
利用java语言深度控制word 11-17
利用实体ejb来避免性能缺陷:一种映射持久性数据的简便方法 11-17
运用加密技术保护java源代码 11-16
mp3在sony ericsson k700上的音响效果 11-17
java 国际化和本地化 toolkit 2.0(上) 11-17
返回首页 | 关于我们 | J网章程 | JSP空间合租 | 客服中心 | 免责声明 | 常见问题 | 参观机房
本站主机空间代理至厦门市华众网络科技有限公司
《中华人民共和国增值电信业务经营许可证》
编号:闽B2-20050079
@2005-2008福建JSP技术网 版权所有 闽ICP备05000928号
技术电话:13616026886
邮箱:admin@fjjsp.com 站长QQ,点击这里给我发消息