ORA-00936: ошибка отсутствия выражения при изменении таблицы ALTER имя_таблицы (имя_столбца ПО УМОЛЧАНИЮ для пустого имени_столбца.nextval)

avatar
user16399158
9 августа 2021 в 05:51
130
2
0

Я добавил новый столбец в таблицу, используя:

ALTER table table_name add column_name number(8);

А затем обновил его, как показано ниже:

UPDATE table_name set column_name = column_name.nextval;

Затем я попытался изменить столбец на столбец, отличный от NULL, как показано ниже:

ALTER table table_name modify (column_name DEFAULT on null column_name.nextval)

после последнего запроса я получил следующую ошибку:

ORA-00936: отсутствует выражение

ПРИМЕЧАНИЕ. Здесь добавлен новый столбец "Последовательность".

Не могли бы вы сообщить мне, что мне здесь не хватает.

Спасибо.

Источник
astentx
9 августа 2021 в 07:16
0

Для alte table вы должны указать что делать со столбцом. Синтаксис: { add_column_clause | modify_column_clauses | drop_column_clause | add_period_clause | drop_period_clause }... | rename_column_clause

Ответы (2)

avatar
Arif Sher Khan
9 августа 2021 в 06:06
0

Я понимаю, что вам не нужно указывать 'ON NULL' в операторе alter. Попробуйте подписаться.

create sequence test_seq;
create table test_table (col_1 number);
alter table test_table modify col_1 default test_seq.nextval;

Выражение Alter в последнем автоматически установит значение столбца в следующее значение последовательности, если значение null вставлено в test_table.col_1

avatar
Littlefoot
9 августа 2021 в 06:05
0

Должно быть:

SQL> create table test (name varchar2(10));

Table created.

SQL> alter table test add id number;

Table altered.

SQL> alter table test modify id not null;           --> this

Table altered.

SQL> create sequence seq;

Sequence created.

SQL> alter table test modify id default on null seq.nextval;  --> this

Table altered.

SQL> desc test
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 NAME                                               VARCHAR2(10)
 ID                                        NOT NULL NUMBER

SQL>

Обратите внимание, что такой синтаксис не будет работать в некоторых предыдущих версиях базы данных Oracle (например, 11g). Вы должны указать, какую версию вы используете.

user16399158
13 августа 2021 в 12:08
0

Спасибо за ответ и извините за отсутствие версии. Виноват. Это 11г.