zoukankan      html  css  js  c++  java
  • Oracle表的Rowid字段

    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
    
  • 相关阅读:
    windows下安装nginx
    java 32位MD5加密的大写字符串
    eclipse运行maven的jetty插件内存溢出
    Phpstorm Alt+Enter 自动导入类
    CSS 再学习,文本处理
    1406 data too long for column 'content' at row 1
    tp5.1报错 页面错误!请稍后再试
    lnmp升级php
    Tp5,Service使用
    CSS再学习 之背景色 背景图片
  • 原文地址:https://www.cnblogs.com/black-start/p/11007720.html
Copyright © 2011-2022 走看看