Ответ 1
ALTER TABLE YourTable MODIFY YourColumn DEFAULT NULL;
Столбец в таблице имеет значение по умолчанию sysdate, и я хочу изменить его, чтобы он не получил значения по умолчанию, как это сделать?
ALTER TABLE YourTable MODIFY YourColumn DEFAULT NULL;
Ответ джо является правильным в том смысле, что столбец с 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()
или полностью воссоздать таблицу с нет значения по умолчанию.
Единственный способ сделать то, что вы хотите, - это воссоздать таблицу.
Это довольно легко сделать в Toad, просто щелкните правой кнопкой мыши на таблице и выберите "Rebuild Table". Жаба создаст script, который переименует таблицу и воссоздает новую таблицу. script будет воссоздавать индексы, ограничения, внешние ключи, комментарии и т.д.... и заполнять таблицу данными.
Просто измените script, чтобы удалить "default null" после соответствующего столбца.