Изменить таблицу после ключевого слова в Oracle

ALTER TABLE testTable ADD column1 NUMBER(1) DEFAULT 0 NOT NULL AFTER column2;

Почему я не могу использовать синтаксис mySql в Oracle тоже? Вышеупомянутая команда работает в MySql. Можете ли вы дать мне эквивалент, который работает?


Error report:
SQL Error: ORA-01735: invalid ALTER TABLE option
01735. 00000 -  "invalid ALTER TABLE option"

Я спрашиваю, есть ли способ использовать после предложения в команде Oracle, которую я предоставил?

Ответ 1

Поскольку SQL является реляционной алгеброй. Не важно, что столбцы "where" расположены внутри таблицы, только они существуют.

Чтобы заставить его работать в Oracle, просто избавиться от предложения after. Документация Oracle для alter table здесь здесь, но она сводится к следующему:

alter table testTable
    add ( column1 number(1) default 0 not null )

Нет инструкции after для команды alter table.

Ответ 2

Oracle не поддерживает добавление столбцов в середине таблицы, только добавляя их в конец. Ваш дизайн базы данных и функциональность приложения не должны зависеть от порядка столбцов в схеме базы данных. Вы всегда можете указать порядок в своем заявлении select.

Однако, если по какой-то причине вы просто должны иметь новый столбец в середине вашей таблицы, есть работа.

CREATE TABLE tab1New AS SELECT 0 AS col1, col1 AS col2 FROM tab1;
DROP TABLE tab1 PURGE;
RENAME tan1New to tab1;

Где SELECT 0 AS col1 - ваш новый столбец, а затем укажите другие столбцы, если необходимо, из вашей исходной таблицы. Поместите SELECT 0 AS col1 в нужное место в том порядке, в котором вы хотите.

Впоследствии вы можете захотеть запустить оператор alter table в столбце, чтобы убедиться в том, какой тип данных вы хотите.

Ответ 3

Попробуйте следующее:

ALTER TABLE testTable ADD column1 NUMBER(1) DEFAULT 0 NOT NULL