虚拟列

虚拟列:虚拟列是不保存在磁盘中的,仅在获取的时候根据存储在磁盘中的列计算,组合获取。虚拟列可以创建索引,可以收集统计信息。创建虚拟列的语法是:column datatype(generated always) as (exp) virtrual,在定义虚拟列时没有指定数据类型则默认使用虚拟列表达式里面返回的值的数据类型,虚拟列的值不能是哦那个update和insert操作来更新,其值会根据新加入或更新的对应的列值计算来获取。针对虚拟列创建的索引等价于创建一个函数索引

虚拟列的限制:

1)虚拟列只能在relation heap表中使用,在组织索引表,外部表,对象表(objct table),聚簇报,临时表中都不可用。

2)虚拟列的表达式不能指向另一个虚拟列(虚拟列是在查询时根据表达式来计算,所以会有存在计算的是按后),这样会存在不确定性;虚拟列表达式涉及到的列 只能在同一个表中;虚拟列表达式中可以使用用户自定义的函数,但是如果使用用户自定义的函数后,该虚拟列不能作为分区;虚拟列表达式返回的值必须是是一个 确定的值;

3)虚拟列的数据类型不能是 a user-defined type, or LOB or LONG RAW.