Oracle 内置数据类型 -- ROWID

来源:互联网 发布:战争知乎 编辑:程序博客网 时间:2024/05/18 02:06

-- Start

在数据库中,每一行都有一个地址,我们可以查询伪列 ROWID 来得到这个值。

CREATE TABLE TEST(NAME VARCHAR(10));INSERT INTO TEST VALUES ('TEST');SELECT ROWID, NAME FROM TEST;-- 结果ROWID               NAMEAAAFCoAAEAAAASuAAATEST

这个值看上去是一个字符串,但事实上,它的类型是 ROWID,我们可以定义一个列,它的类型为 ROWID。

CREATE TABLE TEST(  NAME        VARCHAR(10),  LINE_ID     ROWID         NULL);INSERT INTO TEST (NAME) VALUES ('TEST');UPDATE TEST SET LINE_ID = ROWID;SELECT ROWID, LINE_ID, NAME FROM TEST;-- 结果ROWID                   LINE_ID                 NAMEAAAFCpAAEAAAAS2AAAAAAFCpAAEAAAAS2AAATEST

对于某些表,如索引组织表,由于它存储在索引的叶子节点上,可以移动,也就意味着它的物理地址可能会变。为了确保返回的 ROWID 不发生变化,Oracle 会根据主键生产一个逻辑的 ROWID, 此时 ROWID 的数据类型是 UROWID.

CREATE TABLE TEST(NAME        VARCHAR(10) PRIMARY KEY,VALUE       VARCHAR(10)) ORGANIZATION INDEX;INSERT INTO TEST (NAME, VALUE) VALUES ('KEY', 'VALUE');CREATE TABLE LINE(  LINE_ID       UROWID(60));INSERT INTO LINESELECT ROWID FROM TEST;SELECT * FROM LINE;-- 结果LINE_ID*BAEABMMDS0VZ/g


--更多参见:Oracle SQL 精萃

-- 声明:转载请注明出处

-- Last edited on 2015-01-01

-- Created by ShangBo on 2014-12-31

-- End


0 0
原创粉丝点击