oracle11g新特性之--虚拟列(virtualcolumn)oracle11g虚拟列virtualcolumn介绍oracle11g在表中引入了虚拟列,虚拟列是一个表达式,在运行时计算,不存储在数据库
oracle 11g新特性之--虚拟列(virtual column)
14:51:28 scott@ test1 >create table emp314:51:51 2 (14:51:51 3 empno number(6),14:51:51 4 sal number(8,2),14:51:51 5 comm number(8,2),14:51:51 6 sal_pack generated always as ( sal + nvl(comm,0) ) virtual14:51:51 7 )table created.2、查看虚拟列属性
14:56:10 scott@ test1 >col table_name for a1014:56:19 scott@ test1 >col column_name for a2014:56:27 scott@ test1 >col data_type for a2014:56:34 scott@ test1 >col data_default for a2014:56:48 scott@ test1 >r 1 select table_name,column_name,data_type,data_default,virtual_column from user_tab_cols 2* where table_name='emp3'table_name column_name data_type data_default vir---------- -------------------- -------------------- -------------------- ---emp3 sal_pack number sal+nvl(comm,0) yesemp3 comm number noemp3 sal number noemp3 empno number no 上述建的虚拟列 sal_pack 是由一个简单的表达式创建的,使用的关键字有 virtual(不过这个关键字是可选的),该字段的值是由 comm 这个字段通过表达式计算而来的。
在table上添加虚拟列:
15:44:12 scott@ test1 >alter table emp3 add (sal_total as (sal*12+comm) virtual);table altered.15:49:11 scott@ test1 >desc emp3; name null? type ----------------------------------------------------------------- -------- -------------------------------------------- empno number(6) sal number(8,2) comm number(8,2) sal_pack not null number sal_total number 15:49:16 scott@ test1 >select * from emp3; empno sal comm sal_pack sal_total---------- ---------- ---------- ---------- ---------- 10 1500 500 2000 18500 20 3000 500 3500 36500 30 4000 500 4500 48500 40 6000 500 6500 72500 15:51:00 scott@ test1 >select table_name,column_name,data_type,data_default,virtual_column from user_tab_cols15:51:27 2 where table_name='emp3';table_name column_name data_type data_default vir---------- -------------------- -------------------- -------------------- ---emp3 sal_total number sal*12+comm yesemp3 sal_pack number sal+nvl(comm,0) yesemp3 comm number noemp3 sal number noemp3 empno number no