之前做数据仓库的时候没有用到虚拟列,最近在看其他人设计的数据模型的时候,发现用了很多虚拟列,12g都出了,我还在学习11g特性,呵呵,要补的功课还是很多啊。
虚拟列(virtual
column):并没有存储在数据文件中,而是通过列数据的生成放到了数据字典中,通过真实列的数值计算而来,位置可以随意摆放,可以引用多个实际列的值,但是不能引用其他的虚拟列(但可以使用其他宾变通的方式),也不能只包含虚拟列。
好处:减少数据的存储,简化了对列进行处理,而且可以对虚拟列进行分区,可以使用自定义函数
缺点:
1、不能使用create table as select ... 来创建包含虚拟列的表,解决办法是先create table
as select...创建不含虚拟列的表,在altertable创建含虚拟列的表。
2、虚拟化的列的值被实体化后,会发生虚拟列表达式的变化,会造成实体化和虚拟列的值不同。
自定义函数注意事项:
1、函数要声明
2、函数中要引用表中的列,不能只包含虚拟列
3、不能替换被定义为索引的虚拟列的计算公式,但是可以修改计算公式用到的自定义函数。但是修改了函数以后,索引要重建,不然查询会出现问题。
练习:
1、创建虚拟表有两个虚拟字段,但是虚拟列不能引用虚拟列:
create table t_vertual_column(c_v1 number,c_v2 number,v1 as
(c_v1+c_v2),v2 as (