【VIRTUAL COLUMN】Oracle 11g中的虛擬列技術

secooler發表於2010-05-10
Oracle在11g中推出了虛擬列的技術,虛擬列的資料並沒有被被儲存在資料檔案中,而是在使用的過程中計算得到的。

簡單看一下這個技術。

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
--------
secooler

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 virtual 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 --

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/519536/viewspace-662376/,如需轉載,請註明出處,否則將追究法律責任。

相關文章