Подтвердить что ты не робот

Как удалить значение по умолчанию из столбца в оракуле?

Столбец в таблице имеет значение по умолчанию sysdate, и я хочу изменить его, чтобы он не получил значения по умолчанию, как это сделать?

4b9b3361

Ответ 1

ALTER TABLE YourTable MODIFY YourColumn DEFAULT NULL;

Ответ 2

Ответ джо является правильным в том смысле, что столбец с DEFAULT NULL функционально эквивалентен тому, что он никогда не определял значение по умолчанию для этого столбца, во-первых: если столбец не имеет значения по умолчанию, вставка новой строки без указания значение для этого столбца приводит к NULL.

Тем не менее,, Oracle внутренне представляет два случая по-разному, что можно увидеть, взглянув на системное представление ALL_TAB_COLUMNS. (Это относится к Oracle 10.x, 11.x и 12.x, а также, возможно, и к более старым версиям.)

  1. Случай, когда был создан столбец или 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
            …
       )
    
  2. Никогда не указывалось по умолчанию:

    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" после соответствующего столбца.