是否有可能在Oracle中使虚拟列不再虚拟?

时间:2014-06-20 18:10:52

标签: sql oracle

我们有一个用(可空)虚拟列定义的Oracle表。出于多种原因,我们已经确定应该事先生成此列并正常填充。是否可以修改列,使其不再是虚拟而不删除并添加回来?

以下不起作用:

alter table mytable modify virtualcolumn varchar2(255)

它成功返回,但生成功能仍然存在。我没有看到有关删除Oracle 11g语法图中的“虚拟”属性的任何信息,这使我相信目前无法实现这一点。

1 个答案:

答案 0 :(得分:2)

不,虚拟列本身不能实现"实现"。如果需要永久创建虚拟列,请向表中添加新列,使用虚拟列中的值更新它,然后删除该虚拟列。

您在问题中提供的alter table DML语句不会将虚拟列转换为永久列。它成功返回只是因为虚拟列的新旧数据类型相同(您无法更改虚拟列的数据类型而不更改基础表达式的数据类型)。不过,它们的尺寸可能会有所不同。