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. tar:文件打包归档

    造冰箱的大熊猫@cnblogs 2018/12/24 1.什么是tar 1.1.tar tar命令将指定的文件.文件夹打包(存储)为一个文件(归档文件,archive file).tar将被归档文件以 ...

  2. MessagePack Java Jackson 在不关闭输入流(input stream)的情况下反序列化多变量

    com.fasterxml.jackson.databind.ObjectMapper 在读取输入流变量的时候默认的将会关闭输入流. 如果你不希望关闭输入流,你可以设置 JsonParser.Feat ...

  3. 【CUDA 基础】3.5 展开循环

    title: [CUDA 基础]3.5 展开循环 categories: - CUDA - Freshman tags: - 展开归约 - 归约 - 模板函数 toc: true date: 2018 ...

  4. 2019牛客暑期多校训练营(第二场)D bitset

    题意 给一个n个结点的带点权的图,找到第k小的团的权值 分析 用bitset表示团的状态,一个结点必须和团里的每个结点都连边才能加进去,所以可以直接用\(\&\)运算来判断一个结点是否能加进去 ...

  5. Linux之防火墙iptables

    一.检查iptables服务状态 1.首先检查iptables服务的状态 [root@bogon ~]# service iptables status iptables: Firewall is n ...

  6. android 开发随手记

    1.Fragment 跳转到Activity 修改数据,修改完后从Activity 返回(返回键)Fragment ,要求刷新Fragment界面的数据 解决办法: 在Fragment中注册一个监听广 ...

  7. Vue_(组件通讯)使用solt分发内容

    Vue特殊特性slot 传送门 有时候我们需要在自定义组件内书写一些内容,例如: <com-a> <h1>title</h1> </com-a> 如果想 ...

  8. spark-sql cli 参数 及使用

    很难找到spark-sql cli使用的教程,总结下一.启动方法/data/spark-1.4.0-bin-cdh4/bin/spark-sql --master spark://master:707 ...

  9. Struts2与Servlet API的解耦访问

  10. 使用Statement执行DML和DQL语句

    import com.loaderman.util.JdbcUtil; import java.sql.Connection; import java.sql.DriverManager; impor ...