Oracle 中是否可以使虚拟列不再虚拟?

Mar*_* T. 4 sql oracle

我们有一个用(可为空的)虚拟列定义的 Oracle 表。出于多种原因,我们决定实际上应提前生成此列并按正常方式填充。是否可以修改该列,使其不再是虚拟的,而无需删除并重新添加它?

以下不起作用:

alter table mytable modify virtualcolumn varchar2(255)
Run Code Online (Sandbox Code Playgroud)

它成功返回,但生成函数仍然存在。我在 Oracle 11g 语法图中没有看到任何有关删除“虚拟”属性的内容,这让我相信这目前是不可能的。

Nic*_*nov 5

不,虚拟列本身无法“物化”。如果需要使虚拟列永久化,请向表中添加新列,使用虚拟列中的值更新它,然后删除该虚拟列。

alter table您在问题中提供的 DML 语句不会将虚拟列转换为永久列。它成功返回只是因为虚拟列的新旧数据类型相同(您不能在不更改基础表达式的数据类型的情况下更改虚拟列的数据类型)。但它们的大小可能不同。