今天给大家讲解一下Oracle11g数据库的新特性——虚拟列的介绍在老的Oracle版本中,当我们需要使用表达式或者一些计算公式的时候,我们会创建一个数据库View,如果我们需要在这个视图上使用索引,我们将创建一个基于函数的索引。现在Oracle11g允许我们直接在表上使用虚拟列来存储表达式。让我们看一个简单的例子:CREATETABLEEMP(EMPNONUMBER(6),SALNUMBER(8,2),COMMNUMBER(8,2),SAL_PACKGENERATEDALWAYSAS(SAL+NVL(COMM,0))VIRTUAL);上面创建的虚拟列SAL_PACK是由一个简单的表达式Created创建的,使用的关键字是VIRTUAL(但这个关键字是可选的),这个字段的值是通过表达式由COMM字段计算出来的。虚拟列的值不存储在磁盘上,它们是在查询时根据定义的表达式临时计算的。我们不能将数据插入虚拟列:SQL>INSERTINTOempVALUES(10,1500,500,2000);ERRORatline1:ORA-54013:INSERToperationdisallowedonvirtualcolumns我们也不能隐式地将数据添加到虚拟列:SQL>INSERTITOtVALUES(10,1500,500);*ERRORatline1:ORA-00947:notenoughvalues我们只能使用物理列来插入数据。SQL>INSERTIINTOt(empno,sal,comm)VALUES(10,1500,500);1行已创建。然后就可以查询虚拟列的值了:SQL>select*fromemp;EMPNOSALCOMMSAl_PACK------------------------10150050020001rowselected.查询时立即计算表达式,然后输出上面的结果。虚拟列上的索引和约束索引和约束也可以应用于虚拟列。我们可以使用如下SQL语句创建索引:SQL>createindexsal_pack_idxonemp(sal_pack);索引已创建。我们还可以为虚拟列创建外键。使用PLSQL函数处理虚拟列虚拟列的定义可以使用PLSQL函数,但是函数必须是确定性的:结尾;那么在虚拟列中可以使用以上函数:SQL>ALTERTABLEempADDsal_pack_tempGENERATEDALWAYSAS(sum_num(SAL,COMM)):CommentsonTableAlteredvirtualcolumns为虚拟列创建注释的方法:SQL>COMMENTONCOLUMNemp.sal_packIS'Virtualcolumn[sal+comm]';已创建评论。上面的例子看起来比视图本身的功能要简单得多。希望这对你也有用。原文链接:https://img.ydisp.cn/news/20220804/g12a35qsvir【编辑推荐】11条重要的数据库设计规则10条让数据库更快的建议20条数据库设计最佳实践
