Oracle在中推出了的,虚拟列的数据并没有被被保存在数据文件中,而是在使用的过程中计算得到的。
简单看一下这个技术。
1.创建测试表T,并初始化一条数据
sec@11gR2> create table t (x varchar2(8));
Table created.
sec@11gR2> insert into t values ('secooler');
1 row created.
sec@11gR2> select * from t;
X
--------
2.在T表中添加一个虚拟列virtual_column_x,用来得到x列的大写形式
sec@11gR2> alter table t add (virtual_column_x as (upper(x)));
Table altered.
sec@11gR2> desc t;
Name Null? Type
----------------------- -------- -----------------
X VARCHAR2(8)
VIRTUAL_COLUMN_X VARCHAR2(8)
3.此时查询表T内容
sec@11gR2> col VIRTUAL_COLUMN_X for a20
sec@11gR2> select * from t;
X VIRTUAL_COLUMN_X
-------- --------------------
secooler SECOOLER
4.注意具有虚拟列表的插入方式
sec@11gR2> insert into t values ('hou','HOU');
insert into t values ('hou','HOU')
*
ERROR at line 1:
ORA-54013: INSERT operation disallowed on columns
如果不指定列名的话就会收到这个ORA-54013错误:虚拟列不允许INSERT操作。
我们需要通过指定列名的方式来完成数据的插入。
sec@11gR2> insert into t (x) values ('hou');
1 row created.
sec@11gR2> select * from t;
X VIRTUAL_COLUMN_X
-------- --------------------
secooler SECOOLER
hou HOU
5.小结
11g推出的虚拟列技术,可以说是以CPU换DISK空间的技术,Oracle之后在真正使用到虚拟列的时候才去计算它,因此可以有效地节省磁盘。
关于虚拟列的技术点还有很多,探索ing
Good luck.
secooler
10.05.10
-- The End --
阅读(1572) | 评论(0) | 转发(1) |