Столбец в таблице имеет значение по умолчанию sysdate, и я хочу изменить его, чтобы он не получил значения по умолчанию, как это сделать?
Как удалить значение по умолчанию из столбца в оракуле?
Ответ 1
ALTER TABLE YourTable MODIFY YourColumn DEFAULT NULL;
Ответ 2
Ответ джо является правильным в том смысле, что столбец с DEFAULT NULL
функционально эквивалентен тому, что он никогда не определял значение по умолчанию для этого столбца, во-первых: если столбец не имеет значения по умолчанию, вставка новой строки без указания значение для этого столбца приводит к NULL
.
Тем не менее,, Oracle внутренне представляет два случая по-разному, что можно увидеть, взглянув на системное представление ALL_TAB_COLUMNS
. (Это относится к Oracle 10.x, 11.x и 12.x, а также, возможно, и к более старым версиям.)
Случай, когда был создан столбец или
ALTER
сDEFAULT NULL
:create table foo (bar varchar2(3) default null); select default_length, data_default from all_tab_columns where table_name='FOO'; => default_length data_default -------------- ------------ 4 NULL select dbms_metadata.get_ddl('TABLE','FOO') from dual; => CREATE TABLE "FOO" ( "BAR" VARCHAR(3) DEFAULT NULL … )
Никогда не указывалось по умолчанию:
create table foo (bar varchar2(3)); select default_length, data_default from all_tab_columns where table_name='FOO'; => default_length data_default -------------- ------------ (null) (null) select dbms_metadata.get_ddl('TABLE','FOO') from dual; => CREATE TABLE "FOO" ( "BAR" VARCHAR(3) … )
Как показано выше, существует важный случай, когда это бессмысленное различие имеет значение в выводе Oracle: при использовании DBMS_METADATA.GET_DDL()
для извлечения определения таблицы.
Если вы используете GET_DDL()
для анализа вашей базы данных, вы получите немного другой вывод DDL для функционально идентичных таблиц.
Это действительно очень раздражает при использовании GET_DDL()
для контроля версий и сравнения между несколькими экземплярами базы данных, и нет никакого способа избежать этого, кроме как вручную изменить вывод GET_DDL()
или полностью воссоздать таблицу с нет значения по умолчанию.
Ответ 3
Единственный способ сделать то, что вы хотите, - это воссоздать таблицу.
Это довольно легко сделать в Toad, просто щелкните правой кнопкой мыши на таблице и выберите "Rebuild Table". Жаба создаст script, который переименует таблицу и воссоздает новую таблицу. script будет воссоздавать индексы, ограничения, внешние ключи, комментарии и т.д.... и заполнять таблицу данными.
Просто измените script, чтобы удалить "default null" после соответствующего столбца.