Rowid 字段类型:

Rowid 是一行数据的一个唯一标识。

ROWID 是数据的详细地址,通过 rowid,oracle 可以快速的定位某行具体的数据的位置。 ROWID 可以分为物理 rowid 和逻辑 rowid 两种。普通的堆表中的 rowid 是物理 rowid,索引组织表(IOT)的 rowid 是逻辑 rowid。oracle 提供了一种 urowid 的数据类型,同时支持物理和逻辑 rowid。本文主要关注物理 rowid。

物理 rowid 又分为扩展 rowid(extended rowid)和限制 rowid(restricted rowid)两种格式。限制 rowid 主要是 oracle7 以前的 rowid 格式,现在已经不再使用,保留该类型只是为了兼容性。 所下面来做个例子,来帮助我们认识它:

SQL> create table test(id number,name varchar2(10));

Table created.

  

插入几条数据

SQL> insert into test values(0,'orcl');
SQL> insert into test values(1,'orcl');
SQL> insert into test values(2,'orcl');
SQL> insert into test values(3,'orcl');

查看表内容

SQL> select rowid,id,name from test;

ROWID                      ID NAME
------------------ ---------- ----------
AAAV5DAAOAAAACWAAA 0 orcl
AAAV5DAAOAAAACWAAB 1 orcl
AAAV5DAAOAAAACWAAC 3 orcl
AAAV5DAAOAAAACWAAD 2 orcl

Rowid 是一个隐藏的字段,每一张表都存在,默认查看一张数据的时候不会出现。只有特意加上 rowid 字段才会出现。

Rowid 的结构:

Rowid 的显示形式

我们从 rowid 伪列里 select 出来的 rowid 是基于 base64 编码,一共有 18 位,分为 4 部分:

OOOOOOFFFBBBBBBRRR

现在的格式是 9i 及以后版本的格式。

前 6 位( OOOOOO )为数据对象 ID,一张表、一个所引都是一个数据对象,oracle 都会分配给他们一个唯一的数据对象。

紧跟的 3 位( FFF )为相对的文件 ID,我们知道表空间是由不同的文件组成,对象存储的某个文件里,每个文件会对应一个 ID 号

再接着的 6 位( BBBBBB )为块 ID ,文件是由块组成的,每个块也有一个唯一的 ID 编号。

最后 3 位( RRR )为行 ID ,每个块又可划分成行,每个行也有一个 ID 号。

可以根据64位编码表转义到具体的数据对象ID、文件ID、块ID、行ID。

select dbms_rowid.rowid_object(rowid) obj_id,

dbms_rowid.rowid_relative_fno(rowid) rfile_id,

dbms_rowid.rowid_block_number(rowid) block_id,

dbms_rowid.rowid_row_number(rowid) row_id,

dbms_rowid.rowid_to_absolute_fno(rowid,'TEST','ITPUX') file#

from test.itpux;

SQL> select dbms_rowid.rowid_object(rowid) obj_id,
2 dbms_rowid.rowid_relative_fno(rowid) rfile_id,
3 dbms_rowid.rowid_block_number(rowid) block_id,
4 dbms_rowid.rowid_row_number(rowid) row_id,
5 dbms_rowid.rowid_to_absolute_fno(rowid,'TEST','TEST') file#
6 from test.test; OBJ_ID RFILE_ID BLOCK_ID ROW_ID FILE#
---------- ---------- ---------- ---------- ----------
89667 14 150 0 14
89667 14 150 1 14
89667 14 150 2 14
89667 14 150 3 14

Oracle表的Rowid字段的更多相关文章

  1. oracle表名、字段名大小写问题。

    oracle  表名 .字段名 默认不区分大小写,除非建表语句中带双引号 如CREATE TABLE "TableName"("ID" number). CRE ...

  2. 在oracle表中增加字段,并调整字段的顺序

    增加字段的语句很简单,以用户身份连接oracle服务: alter table tablename add(colname coltype); # 填上表名.字段名.字段类型 修改字段顺序前,查看表中 ...

  3. Oracle表的维护(字段,重命名表名)

    案例:银行里建的开卡信息 字段 字段类型 Id Number name Varchar2(64) sex Char2() birth Date money Number(10,2) 创建银行卡表 cr ...

  4. Oracle 表空间修改字段大小

    1.修改字段大小 当表中已经存在数据,就不能直接修改某字段大小,需要新建一个字段来过渡   ALTER TABLE TABLE RENAME COLUMN GRP TO FUND_GRP_1; ); ...

  5. oracle表中某个字段含有字符回车、空格的手动修改方式

    select t.*, t.rowid from TB_SD_STANDARD_CHOOSE_ADVISE t where t.id =323900000 update TB_SD_STANDARD_ ...

  6. oracle的表名、字段名、constraint名的长度限制分别是多少?

    文章出处:http://blog.csdn.net/haiross/article/details/38379615 Oracle:表名.字段名.constraint名的长度有限制 oracle 的命 ...

  7. Oracle 实现表中id字段自增长

    Oracle 实现表中id字段自增长 最近正在学习Oracle的时候发现Oracle表中的字段不能像mysql中那样可以用auto increment修饰字段从而让id这种主键字段实现自增长. 那Or ...

  8. spool命令、创建一个表,创建而且copy表,查看别的用户下的表,rowid行地址 索引的时候使用,表的增删改查,删除表,oracle的回收站

      1.spool命令 spool "D:\test.txt" spool off SQL> host cls 2.创建一个表 SQL> --条件(1):有创建 ...

  9. 获取oracle 表字段,表名,以及主键之类等等的信息。

    获取表名:  Oracle的user_talbes用于记录了用户表信息. select * from user_tables  获取某个表的字段: USER_TAB_COLS中记录了用户表的列信息.下 ...

随机推荐

  1. scanf的格式化字符串的匹配规则

    1.对于空白字符:空格.tab.回车等,scanf将忽略输入字符串的空白字符,直到下一个非空白字符,(并回放该非空白字符), 若该非空白字符与格式化字符串匹配,则读入 若该非空白字符与格式化字符串不匹 ...

  2. jdk中使用的设计模式

    在JDK(Java Development Kit)类库中,开发人员使用了大量设计模式,正因为如此,我们可以在不修改JDK源码的前提下开发出自己的应用软件,研究JDK类库中的模式实例也不失为学习如何使 ...

  3. npm安装cnpm时候报错code EINTEGRITY

    npm安装cnpm时候报错code EINTEGRITY错误展示 PS C:\Users\by\Desktop\element_ui_demo> npm install --g  npmnpm ...

  4. [Python] 等号赋值, copy, deepcopy的区别

    参考链接: 1. 介绍python中的可变类型与不可变类型:https://blog.csdn.net/answer3lin/article/details/86430074 (也可以参考转载博客 P ...

  5. Android_(自动化)自动获取手机电池的剩余电量

    自动获取手机电池的剩余电量 通过使用BroadcastReceiver的特性来获取手机电池的电量,注册BroadcastReceiver时设置的IntentFilter来获取系统发出的Intent.A ...

  6. Oracle For Linux

    安装前检查 检查是否安装以下软件rpm -qa | grep **下面**软件包 安装包名称 是否安装 binutils-2.17.50.0.6 √ compat-libstdc++-33-3.2. ...

  7. Hadoop-2.7.5完全分布式搭建

    1.在虚拟机上安装Hadoop完全分布式准备工作 1)这里使用的是VMWare软件,在VMWare上安装一个CentOS6.5,并再克隆两个机器配置相关MAC地址,以及配置机器名 2)三台虚拟机配置好 ...

  8. JS中的原型链和原型的认识

    这篇文章主要是学习一下JavaScript中的难点------原型和原型链 自定义一个对象 我们学习一门编程语言,必然要使用它完成一些特定的功能,而面向对象的语言因为符合人类的认知规律,在这方面做得很 ...

  9. 普通线程类获取service,controller等spring容器类

    package com.zihexin.application.strategy; import org.springframework.beans.BeansException; import or ...

  10. pandas数据分析案例

    1.数据分析步骤 ''' 数据分析步骤: 1.先加载数据 pandas.read_cvs("path") 2.查看数据详情 df.info() ,df.describe() ,df ...