oracle rowid 的使用方法

oracle rowid 的使用方法

1.创建一临时表
create table test_rowid (id number, row_id rowid);
2.插入一行记录
insert into test_rowid values(1,null);
3.修改刚插入的记录
update test_rowid set row_id = rowid where id = 1;
4.查看rowid
select rowid,row_id from test_rowid;
返回结果为:
rowid                                                      row_id
AAAO0DAAJAAAAMYAAA               AAAO0DAAJAAAAMYAAA

Oracle的物理扩展ROWID有18位,每位采用64位编码,分别用A~Z、a~z、0~9、+、/共64个字符表示。A表示0,B表示1,……Z表示25,a表示26,……z表示51,0表示52,……,9表示61,+表示62,/表示63。

ROWID具体划分可以分为4部分。

(1).OOOOOO:前6位表示DATA OBJECT NUMBER,将起转化位数字后匹配DBA_OBJECTS中的DATA_OBJECT_ID,可以确定表信息。

如上面例子中的DATA OBJECT NUMBER是AAAO0D,转化位数字是14×64×64 +52×64 + 3。
输入以下查询:
select owner, object_name from dba_objects where data_object_id = 14*64*64 + 52*64 + 3;
返回:
OWNER    OBJECT_NAME
WG             TEST_ROWID
(2)FFF:第7到9位表示相对表空间的数据文件号。
上面的例子中是AAJ,表示数据文件9。
输入以下查询:
(3).BBBBBB:第10到15位表示这条记录在数据文件中的第几个BLOCK中。

上面的例子是AAAAMY,转化位数字是12×64+24,表示这条记录在数据文件中的第792个BLOCK。

(4).RRR:最后3位表示这条记录是BLOCK中的第几条记录。

上面的例子是AAA,表示第0条记录(总是从0开始计数)。

四.参考资料

1.oracle rowid
2.Oracle基本数据类型存储格式浅析(四)——ROWID类型(一)
3.oracle数据文件为什么存在 Rfile# and file#

SQL> CREATE TABLE EMP (EMPNO NUMBER(4) NOT NULL,
  2                    ENAME VARCHAR2(10),
  3                    JOB VARCHAR2(9),
  4                    MGR NUMBER(4),
  5                    HIREDATE DATE,
  6                    SAL NUMBER(7, 2),
  7                    COMM NUMBER(7, 2),
  8                    DEPTNO NUMBER(2));

Table created.

SQL>
SQL> INSERT INTO EMP VALUES (7369, 'SMITH', 'CLERK',    7902, TO_DATE('17-DEC-1980', 'DD-MON-YYYY'), 800, NULL, 20);

1 row created.

SQL> INSERT INTO EMP VALUES (7499, 'ALLEN', 'SALESMAN', 7698, TO_DATE('20-FEB-1981', 'DD-MON-YYYY'), 1600, 300, 30);

1 row created.

SQL> INSERT INTO EMP VALUES (7521, 'WARD',  'SALESMAN', 7698, TO_DATE('22-FEB-1981', 'DD-MON-YYYY'), 1250, 500, 30);

1 row created.

SQL> INSERT INTO EMP VALUES (7566, 'JONES', 'MANAGER',  7839, TO_DATE('2-APR-1981',  'DD-MON-YYYY'), 2975, NULL, 20);

1 row created.

SQL> INSERT INTO EMP VALUES (7654, 'MARTIN', 'SALESMAN', 7698,TO_DATE('28-SEP-1981', 'DD-MON-YYYY'), 1250, 1400, 30);

1 row created.

SQL> INSERT INTO EMP VALUES (7698, 'BLAKE', 'MANAGER', 7839,TO_DATE('1-MAY-1981', 'DD-MON-YYYY'), 2850, NULL, 30);

1 row created.

SQL> INSERT INTO EMP VALUES (7782, 'CLARK', 'MANAGER', 7839,TO_DATE('9-JUN-1981', 'DD-MON-YYYY'), 2450, NULL, 10);

1 row created.

SQL> INSERT INTO EMP VALUES (7788, 'SCOTT', 'ANALYST', 7566,TO_DATE('09-DEC-1982', 'DD-MON-YYYY'), 3000, NULL, 20);

1 row created.

SQL> INSERT INTO EMP VALUES (7839, 'KING', 'PRESIDENT', NULL,TO_DATE('17-NOV-1981', 'DD-MON-YYYY'), 5000, NULL, 10);

1 row created.

SQL> INSERT INTO EMP VALUES (7844, 'TURNER', 'SALESMAN', 7698,TO_DATE('8-SEP-1981', 'DD-MON-YYYY'), 1500, 0, 30);

1 row created.

SQL> INSERT INTO EMP VALUES (7876, 'ADAMS', 'CLERK', 7788,TO_DATE('12-JAN-1983', 'DD-MON-YYYY'), 1100, NULL, 20);

1 row created.

SQL> INSERT INTO EMP VALUES (7900, 'JAMES', 'CLERK', 7698,TO_DATE('3-DEC-1981', 'DD-MON-YYYY'), 950, NULL, 30);

1 row created.

SQL> INSERT INTO EMP VALUES (7902, 'FORD', 'ANALYST', 7566,TO_DATE('3-DEC-1981', 'DD-MON-YYYY'), 3000, NULL, 20);

1 row created.

SQL> INSERT INTO EMP VALUES (7934, 'MILLER', 'CLERK', 7782,TO_DATE('23-JAN-1982', 'DD-MON-YYYY'), 1300, NULL, 10);

1 row created.

SQL>
SQL> CREATE TABLE DEPT (DEPTNO NUMBER(2),DNAME VARCHAR2(14),LOC VARCHAR2(13) );

Table created.

SQL>
SQL> INSERT INTO DEPT VALUES (10, 'ACCOUNTING', 'NEW YORK');

1 row created.

SQL> INSERT INTO DEPT VALUES (20, 'RESEARCH', 'DALLAS');

1 row created.

SQL> INSERT INTO DEPT VALUES (30, 'SALES', 'CHICAGO');

1 row created.

SQL> INSERT INTO DEPT VALUES (40, 'OPERATIONS', 'BOSTON');

1 row created.

SQL>
SQL> select rowid from emp
  2  intersect
  3  select rowid from dept;

实例

SQL> select * from Employee
  2  /

ID   FIRST_NAME LAST_NAME  START_DAT END_DATE      SALARY CITY       DESCRIPTION
---- ---------- ---------- --------- --------- ---------- ---------- ---------------
01   Jason      Martin     25-JUL-96 25-JUL-06    1234.56 Toronto    Programmer
02   Alison     Mathews    21-MAR-76 21-FEB-86    6661.78 Vancouver  Tester
03   James      Smith      12-DEC-78 15-MAR-90    6544.78 Vancouver  Tester
04   Celia      Rice       24-OCT-82 21-APR-99    2344.78 Vancouver  Manager
05   Robert     Black      15-JAN-84 08-AUG-98    2334.78 Vancouver  Tester
06   Linda      Green      30-JUL-87 04-JAN-96    4322.78 New York   Tester
07   David      Larry      31-DEC-90 12-FEB-98    7897.78 New York   Manager
08   James      Cat        17-SEP-96 15-APR-02    1232.78 Vancouver  Tester

8 rows selected.

SQL>
SQL>
SQL> SELECT ROWID, id FROM employee
  2  /

ROWID              ID
------------------ ----
AAAFx7AABAAAKjCAAA 01
AAAFx7AABAAAKjCAAB 02
AAAFx7AABAAAKjCAAC 03
AAAFx7AABAAAKjCAAD 04
AAAFx7AABAAAKjCAAE 05
AAAFx7AABAAAKjCAAF 06
AAAFx7AABAAAKjCAAG 07
AAAFx7AABAAAKjCAAH 08

时间: 2024-10-12 15:05:03

oracle rowid 的使用方法的相关文章

Oracle变异表解决方法--ORA-04091错误

Oracle变异表解决方法--ORA-04091错误 原因:触发器(或者被语句中引用的用户自定义PL/SQL函数)视图去查询(或修改)一个被另一语句修改而触发的表. 解决方法:重写触发器(或函数)避免读该表. 对表进行DELETE,UPDATE,INSERT操作时,所操作的表就变成了变异表,对表的行级(FOR EACH ROW)触发器中不能对该表进行DML操作.这时可以使用两个方法解决. [@more@] 1.采用自治事务pragma autonomous_transaction解决. 下面给出

oracle查看实例名方法

  从事编程的朋友们可能都会遇到连接连接Oracle时会出现oracle url无效的问题,下面小编就教大家oracle查看实例名方法 来帮助各位解决这个问题. oracle查看实例名 在两个配置文件里面分别是listener.ora和tnsnames.ora.路径是:D:Oracle9i_9.2networkadmin,里面写明了远程连接的实例名和端口号,也就是SERVICE_NAME.同时oracle查看实例名 还有另外一种方法就是用SQL语句查询.用管理员身份system登陆后输入"sho

oracle清理数据的方法

oracle清理数据的方法 一.删除一个用户下所有数据库对象 一种方法是删除这个用户然后重建,需要管理员操作: drop user wangyi cascade; --删除用户select * from dba_users where username = 'wangyi' --查询默认表空间drop tablespace WANGYI_DTBS including contents and datafiles; --删除表空间 重建用户: create user wangyi identifi

asp 连接 oracle数据库两种方法

'oracle 连接方法: set adocon=server.createobject("adodb.connection") adocon.open"driver={microsoft odbc for oracle};server=oraclesever.world;uid=admin;pwd=pass;" 'oracle ole db 连接方法: set adocon=server.createobject("adodb.connection&qu

Oracle数据库的备份方法

1.引言 Oracle数据库的备份方法很多,无论使用那种备份方法,备份的目的都是为了在出现故障后能够以尽可能小的时间和代价恢复系统.比如使用export实用程序导出数据库对象.使用Oracle备份数据库.使用Oracle对称复制.使用Oracle并行服务器.使用Oracle冷备份.使用Oracle热备份等各种备份方法都有其优缺点.适用的场合和相应的软硬件要求.本文主要就用export实用程序导出数据库对象.Oracle冷备份.Oracle热备份这三种最基本的备份方法进行详细的探讨,分析各自的优缺

SQL语句中的case when语法以及Oracle中的类似方法

一.基本概念和例子 case when是sql语句的语法,而不是属于特定数据库的语言 方法一: select num,name, (case classnowhen '1' then '一班'when '2' then '二班'else '其他班级' end) as classname from student 方法二: select num,name, (case when classno = '1' then '一班'when classno = '2' then '二班'else '其他班

Oracle构造序列的方法分析对比

编辑手记:关于Oracle的序列,相信大家并不陌生,但很多人平时只用到connect by 的方式来构造序列,今天一起来学习更多的构造序列的方法及每个方法的优缺点. 作者介绍 怀晓明,云和恩墨性能优化专家.ITPUB社区版主,兴趣广泛,视野广阔,目前专注于SQL审核与优化工作,是一个细心敏锐的troubleshooter.擅长数据库和web的设计和开发,精于故障诊断和处理. 正文 Oracle构造序列的方法随着版本一直在变化.在9i之前的版本,常用的方法是: select rownum rn f

Oracle ROWID 方式访问数据库

    和ROWNUM一样,ROWID是一个伪列,即是一个非用户定义的列,而又实际存储于数据库之中.每一个表都有一个ROWID列,一个ROWID值用于唯一确定数据库表中的的一条记录.因此通过ROWID 方式来访问数据也是 Oracle 数据库访问数据的实现方式之一.一般情况下,ROWID方式的访问一定以索引访问或用户指定ROWID作为先决条件,因为所有的索引访问方式最终都会转换为通过ROWID来访问数据记录.(注:index full scan 与index fast full scan除外)由

Oracle数据库系统紧急故障处理方法_oracle

正在看的ORACLE教程是:Oracle数据库系统紧急故障处理方法.Oracle物理结构故障是指构成数据库的各个物理文件损坏而导致的各种数据库故障.这些故障可能是由于硬件故障造成的,也可能是人为误操作而引起.所以我们首先要判断问题的起因,如果是硬件故障则首先要解决硬件问题.在无硬件问题的前提下我们才能按照下面的处理方发来进一步处理.  控制文件损坏:  控制文件记录了关于oracle的重要配置信息,如数据库名.字符集名字.各个数据文件.日志文件的位置等等信息.控制文件的损坏,会导致数据库异常关闭