动态网站制作指南 [  QQ表情  ]
[ 投票调查 ]
[ 企业邮箱 ]
[ 网站空间 ]
网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
ASP源码 | .Net源码 | PHP源码 | JSP源码 | JAVA源码 | CGI源码 | VB源码 | C++源码 | Delphi源码 | PB源码 | VF源码 | 汇编 | 服务器
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > Java教程
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
文章搜索服务
邮件订阅
输入你的邮件地址,
你将不会错过任何关于:
[ Java教程 ]的信息

本月文章推荐
.Java Web Start 1.0.1_01的安装向.
.JAVA初学者的6个问题.
.一个让98%的Java程序员犯难的偏门.
.Java和以网络为核心的未来.
.Web程序从Struts向Stripes框架的.
.使用SWT开发用户图形界面.
.闲话Java中的类型转换.
.为J2ME开发移动3D游戏之立即模式.
.中国移动增值服务的前景分析(全.
.【JSF心得】JAVA的对象传递是引用.
.item 方法.
.在Jboss下Web Service调用EJB一.
.osworkflow源码分析(一).
.用Java实现断点续传(HTTP)(1).
.全面解析JDBC(1).
.Java特效生成器──Anfy Java.
.J2ME学习笔记(5)—MIDlets中的图.
.Java实现类MSN、QQ好友上线通知界.
.基于 J2EE 体系实现多层结构 Blo.
.关于解决 Java 编程语言线程问题.

关于扩展(extended)的rowid的一些内容

发表日期:2008-1-5 |



  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
上一篇:Java中的17种常用正则表达式归纳 人气:893
下一篇:为什么用 “==” 与 “equal”得到的输出不同 人气:470
浏览全部Java的内容 Dreamweaver插件下载 常用网页广告代码全集
  最新网站源码 最新软件下载
2008-9-6 Movie34电影搜索引擎 v3.0
2008-9-6 wap2.0仿帝国建站喜用 v2.0
2008-9-6 免费人才招聘网 宽屏版 v3.01
2008-9-6 喜喔喔视频采集程序 v1.0 beta
2008-9-6 ASP客户管理系统
2008-9-6 主流驿站中秋祝福程序
2008-9-6 php实现msn协议的类
2008-9-5 Coppermine Photo Gallery v1.4.
2008-9-5 清松网络日记本 v2.4
2008-8-23 Mini WinMount V0.4
2008-8-23 Vista优化大师3.11正式版
2008-8-23 Wine 1.13
2008-8-23 KlipFolio 5.0 Build 5899-80
2008-8-23 Windows Sysinternals Desktops
2008-8-23 OneTap Movies1.2破解版
2008-8-23 AnnotaterPDF阅读1.1.503 破解版
2008-8-23 SoundMeter分贝测量仪 v1.0汉化破
2008-8-23 iDrum音乐节拍1.0破解版
  发表评论
姓 名: 验证码:
内 容:
站长工具:网站收录查询 | Google PR查询 | ALEXA排名查询 | CSS在线编辑器 | 广告代码 | Html转换js | js/vbs加密 | md5加密 | 进制转换
实用工具:汉字翻译拼音 | 符号对照表 | 个税计算 | 经典小工具 | 汉字简繁转换 | 普通单位换算 | 公制单位换算 | 生辰老黄历 | 国内电话区号 国家代码与域名缩写 | 文字加密解密 | 健康查询 | 万年历 | 汉字横竖排版 | 手机号码查询 | 计算器 | ip搜索
业务联系 | 广告刊登 | 频道合作 | 投稿荐稿 | 联系方式 | 加入收藏 | RSS订阅
Copyright © 2000-2008 www.knowsky.com All rights reserved | 网络实名:动态网站制作指南 | 沪ICP备05001343号