oracle不允许对虚拟列执行,【oracle】11g新特性虚拟列

本文介绍了Oracle 11g的虚拟列特性,虚拟列不存储在数据文件中,而是根据实际列计算得出。虚拟列可以简化数据处理,但也存在一些限制,如不能在创建表时直接使用虚拟列,不能直接更新虚拟列等。此外,文章还探讨了如何在虚拟列上创建索引以及修改函数对索引的影响。
摘要由CSDN通过智能技术生成

之前做数据仓库的时候没有用到虚拟列,最近在看其他人设计的数据模型的时候,发现用了很多虚拟列,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 (

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值