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

问题描述 投票:1回答:1

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

NET_ROWS_ADDED NUMBER(18) GENERATED ALWAYS AS (ROW_COUNT - PREV_ROW_COUNT) /*STORED*/,

[ROW_COUNTPREV_ROW_COUNT是先前在同一表中定义的简单NUMBER(18)列。

一切都写得很好。但是,如果取消注释STORED选项,则会得到:

ORA-00907: missing right parenthesis

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

sql oracle plsql syntax calculated-columns
1个回答
0
投票
Oracle不在磁盘上存储虚拟列,它只是按需评估。您可能对MySQL中的STORED选项感到困惑。由于Oracle中没有STORED子句,因此会引发语法错误。

来自documentation

始终生成

提供了可选关键字GENERATED ALWAYS,用于语义明晰。它们表明该列未存储在磁盘上,但存储在磁盘上。按需评估。

VIRTUAL

为语义提供了可选关键字VIRTUAL清晰。
© www.soinside.com 2019 - 2024. All rights reserved.