Изменить таблицу после ключевого слова в Oracle - PullRequest
11 голосов
/ 19 января 2012
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"

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

Ответы [ 3 ]

18 голосов
/ 19 января 2012

Потому что SQL - это реляционная алгебра.Его не волнует ни один бит о том, «где» столбцы расположены внутри таблицы, только то, что они существуют.

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

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

Для команды alter table есть no after

12 голосов
/ 19 января 2012

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

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

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 для столбца, чтобы убедиться, что это именно тот тип данных, который вам нужен.

1 голос
/ 19 января 2012

Попробуйте это:

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