Oracle11新特性——虚拟列

Oracle11g引入了虚拟列,这些列的值基于其他列计算,不存储于数据文件中。虚拟列可在创建时引用实际列,并可使用Oracle函数或用户定义的确定性函数。插入和更新时需指定所有列,不允许直接修改虚拟列。虚拟列在索引或物化视图中需谨慎处理,避免表达式更改导致数据不一致。
摘要由CSDN通过智能技术生成

 Oracle11g增加了表的虚拟列,这个列的数据并没有存储在数据文件中,而是Oracle通过列数据的生成放到了数据字典中。虚拟列的数值是通过真实列中的数据计算而来的。虚拟列的位置可以放在它参考的列的前面,也可以包括多个实际列的值,但是不能引用其他的虚拟列:

SQL> CREATE TABLE yu_test2   (c_vl_1 NUMBER,   c_vl_2 AS (c_vl_1+1)  );
 
Table created

SQL> CREATE TABLE yu_test2   (c_vl_1 NUMBER,   c_vl_2 AS (c_vl_1+1),   c_vl_3 AS (c_vl_2+1)  );
 
CREATE TABLE yu_test2   (c_vl_1 NUMBER,   c_vl_2 AS (c_vl_1+1),   c_vl_3 AS (c_vl_2+1)  )
 
ORA-54012: 在列表达式中引用了虚拟列


以上只是一个简单的虚拟列的例子,实际上虚拟列的完整写法应该包括列名、数据类型、GENERATED ALWAYS关键字、AS加列表达式和VIRTUAL关键字。其中GENERATED ALWAYS和VIRTUAL为可选关键字,主要用于描述虚拟列的特性,写与不写没有本质区别。而列的数据类型如果忽略,那么Oracle会根据AS后面的表达式最终结果的数据类型来确定虚拟列的数据类型:
SQL> CREATE TABLE yu_test1 ( v_cl_1 VARCHAR2(30),  v_cl_2 CHAR(50) GENERATED ALWAYS AS (LOWER(v_cl_1)) VI

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值