为什么 Oracle 无法识别存储的生成列定义?

Gif*_*guy 3 sql oracle syntax calculated-columns

我在语句中定义了以下生成的列CREATE TABLE

NET_ROWS_ADDED NUMBER(18) GENERATED ALWAYS AS (ROW_COUNT - PREV_ROW_COUNT) /*STORED*/,
Run Code Online (Sandbox Code Playgroud)

ROW_COUNTPREV_ROW_COUNTNUMBER(18)先前在同一个表中定义的简单列。

一切都按照它所写的那样工作正常。
但如果我取消注释该STORED选项,我会得到:

ORA-00907: missing right parenthesis
Run Code Online (Sandbox Code Playgroud)

我需要将其转换为STORED生成的列。
这里的语法有什么问题?在我看来这一切都是正确的......

Lal*_*r B 5

Oracle不在磁盘上存储虚拟列,它仅根据需要进行评估。您可能对MySQL中的STORED选项感到困惑。由于Oracle中没有子句,因此会抛出语法错误。STORED

来自文档

始终生成

提供可选关键字 GENERATED ALWAYS 是为了语义清晰。它们表明该列不存储在磁盘上,而是根据需要进行评估。

虚拟的

提供可选关键字 VIRTUAL 是为了语义清晰。

  • 是的,这正是问题所在。当我寻找 Oracle 的资料时,我总是不小心查看 MySQL 文档。 (2认同)