Почему Oracle не распознает сохраненное сгенерированное определение столбца? - PullRequest
2 голосов
/ 10 апреля 2020

У меня есть следующий сгенерированный столбец, определенный в операторе CREATE TABLE:

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

ROW_COUNT и PREV_ROW_COUNT - простые NUMBER(18) столбцы, ранее определенные в той же таблице.

Все отлично работает, как написано.
Но если я откомментирую параметр STORED, я получу:

ORA-00907: missing right parenthesis

Мне нужно преобразовать это в сгенерированный STORED столбец.
Что не так с синтаксисом здесь? Для меня все выглядит правильно ...

1 Ответ

3 голосов
/ 10 апреля 2020

Oracle не хранит виртуальный столбец на диске, он оценивается только по требованию. Возможно, вы запутались с опцией STORED в MySQL. Поскольку в Oracle отсутствует предложение STORED, оно выдает синтаксическую ошибку.

Из документации :

ВСЕГДА ВСЕГДА

Необязательные ключевые слова GENERATED ВСЕГДА предоставлены для семантической ясности. Они указывают, что столбец не хранится на диске, а оценивается по требованию.

VIRTUAL

Необязательное ключевое слово VIRTUAL предоставляется для семантической ясности.

...