Oracle添加了一个虚拟列,增加了年份

act*_*ram 1 sql oracle alter-table

我正在尝试添加一个日期类型的虚拟列,该列将五年添加到另一个日期列:

ALTER TABLE AU_Ventes ADD (
DateVente date NOT NULL,
DateFinGarantie date As(ADD_MONTHS(DateVente, 60))
);
Run Code Online (Sandbox Code Playgroud)

但我收到错误:“%s:无效标识符”。也许我无法在 ALTER TABLE 中使用 ADD_MONTHS 函数。我可以做什么来完成我想做的事?

谢谢。

Ale*_*ole 5

尽管您可以在语句中定义虚拟列create table,但显然您是在创建虚拟列的同时创建它所基于的列,但您不能在同一alter table语句中同时定义这两者。您必须分两步完成:

ALTER TABLE AU_Ventes ADD DateVente date NOT NULL;
ALTER TABLE AU_Ventes ADD DateFinGarantie date
  As(ADD_MONTHS(DateVente, 60));
Run Code Online (Sandbox Code Playgroud)

不确定这是有意的限制,但它就是这样运作的。

简单的 SQL Fiddle来展示这个工作原理。