ITPub博客

首页 > Linux操作系统 > Linux操作系统 > what is ROWID pseudocolumn

what is ROWID pseudocolumn

原创 Linux操作系统 作者:zhanglei_itput 时间:2009-07-06 17:41:41 0 删除 编辑

一、 what is rowid
   每一个表中都有一列rowid(iot除外),每一行的rowid代表了该行在数据库中存储的实际地址,可见rowid的独特及重要程度。
   rowid是伪列(pseudocolumn),伪劣的意思是实际上这一列本身在数据字典中并不存在,在查询结果输出时它被构造出来的。
   在操作上它和普通的列也有一些差别:
   1. 不能通过desc以及select直接显示出来,除非显式说明
   2. rowid不能做表的primarykey
   3. 不能对rowid执行dml操作
   oracle的伪列还有很多,如:rownum,ora_rowscn,versions_starttime, versions_endtime, versions_xid,versions_operation等,这些列都非常有用,这里暂时不作介绍。
  
二、主要功能测试

[oracle@rac1 ~]$ sqlplus /nolog
SQL*Plus: Release 10.2.0.4.0 - Production on Mon Jul 6 16:15:34 2009
Copyright (c) 1982, 2007, Oracle.  All Rights Reserved.
SQL> conn
ecc_view/ecc@devdb1
Connected.
 SQL> desc test;
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 ID                                                 VARCHAR2(10)

1. 数据字典中并不存在伪列

   SQL> select TABLE_NAME,COLUMN_NAME from dba_tab_columns where table_name = 'TEST';
   
   TABLE_NAME                     COLUMN_NAME
   ------------------------------ ------------------------------
   TEST                           ID

2. select不能直接显示伪列,要显示的说明

   SQL> select * from test;
   ID
   ----------
   1
   2
   1
   2
   
   SQL> select t.*, rowid from test t;
   ID         ROWID
   ---------- ------------------
   1          AAAN+8AAEAAAABFAAA
   2          AAAN+8AAEAAAABFAAB
   1          AAAN+8AAEAAAABHAAA
   2          AAAN+8AAEAAAABHAAB

3. rowid不能做为表的主键

   SQL> alter table test add constraint pk_t primary key (rowid);   
   alter table test add constraint pk_t primary key (rowid)
                                                *
   ERROR at line 1:
   ORA-00904: "ROWID": invalid identifier

4. 不能对rowid执行dml操作

   Although you can use theROWID pseudocolumn in theSELECTand WHEREclause of a query, these pseudocolumn values are not actually stored in the database. You cannot insert, update, or delete a value of theROWIDpseudocolumn
  
   SQL> select t.*,rowid from test t;     
   ID         ROWID
   ---------- ------------------
   1          AAAN+8AAEAAAABFAAA
   2          AAAN+8AAEAAAABFAAB
   1          AAAN+8AAEAAAABHAAA
   2          AAAN+8AAEAAAABHAAB
   
   SQL> insert into test (id, rowid) values('7','AAAN+8AAEAAAABHAAC');
   insert into test (id, rowid) values('7','AAAN+8AAEAAAABHAAC')
                         *
   ERROR at line 1:
   ORA-01747: invalid user.table.column, table.column, or column specification

 

参考文献:http://space.itpub.net/10435225/viewspace-247749

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/9252210/viewspace-608454/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: 无题
下一篇: 检查
请登录后发表评论 登录
全部评论

注册时间:2009-02-10

  • 博文量
    400
  • 访问量
    1224653