本文共 1041 字,大约阅读时间需要 3 分钟。
-- Start
在数据库中,每一行都有一个地址,我们可以查询伪列 ROWID 来得到这个值。
CREATE TABLE TEST( NAME VARCHAR(10));INSERT INTO TEST VALUES ('TEST');SELECT ROWID, NAME FROM TEST;-- 结果ROWID NAMEAAAFCoAAEAAAASuAAA TEST这个值看上去是一个字符串,但事实上,它的类型是 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 NAMEAAAFCpAAEAAAAS2AAA AAAFCpAAEAAAAS2AAA TEST对于某些表,如索引组织表,由于它存储在索引的叶子节点上,可以移动,也就意味着它的物理地址可能会变。为了确保返回的 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
--更多参见:
-- 声明:转载请注明出处
-- Last edited on 2015-01-01
-- Created by ShangBo on 2014-12-31
-- End