Изменить таблицу после ключевого слова в 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