Oracle добавить столбец в таблицу

Обновлено: 04.07.2024

Синтаксис column-definition для нового столбца является подмножеством синтаксиса для столбца в операторе CREATE TABLE.

Синтаксис DataType описан в разделе Типы данных. DataType может быть опущен, только если вы укажете предложение генерации. Если вы опустите DataType, тип сгенерированного столбца будет типом предложения генерации. Если вы укажете и DataType, и предложение-генерации, тип предложения-генерации должен быть назначаемым для DataType.

Подробнее о DefaultConstantExpression см. в разделе Столбец по умолчанию.

изменение столбца

В изменении столбца SET INCREMENT BY integer-constant указывает интервал между последовательными значениями столбца идентификаторов. Следующее значение, которое будет сгенерировано для столбца идентификаторов, будет определено из последнего присвоенного значения с примененным приращением. Столбец уже должен быть определен с атрибутом IDENTITY.

RESTART WITH integer-constant указывает следующее значение, которое будет сгенерировано для столбца идентификаторов. RESTART WITH полезен для таблицы, в которой есть столбец идентификаторов, определенный как GENERATED BY DEFAULT, и уникальный ключ, определенный для этого столбца идентификаторов. Поскольку GENERATED BY DEFAULT допускает как ручную вставку, так и значения, сгенерированные системой, возможно, что вставленные вручную значения могут конфликтовать со значениями, сгенерированными системой. Чтобы обойти такие конфликты, используйте синтаксис RESTART WITH, чтобы указать следующее значение, которое будет создано для столбца идентификаторов. Рассмотрим следующий пример, в котором используется комбинация автоматически сгенерированных данных и данных, вставленных вручную:

Система автоматически сгенерирует значения для столбца идентификации. Но теперь вам нужно вручную вставить некоторые данные в столбец идентификаторов:

На данный момент в столбце идентификаторов используются значения от 1 до 5. Если теперь вы хотите, чтобы система сгенерировала значение, система сгенерирует 3, что приведет к исключению уникального ключа, поскольку значение 3 уже было вставлено вручную. Чтобы компенсировать ручные вставки, выполните оператор ALTER TABLE для столбца идентификаторов с RESTART WITH 6:

ALTER TABLE не влияет на представления, ссылающиеся на изменяемую таблицу. Это включает в себя представления, которые имеют "*" в списке SELECT. Вы должны удалить и заново создать эти представления, если хотите, чтобы они возвращали новые столбцы.

Derby выдает ошибку, если вы пытаетесь изменить DataType сгенерированного столбца на тип, который нельзя назначить из типа предложения генерации. Derby также выдает ошибку, если вы пытаетесь добавить предложение DEFAULT в сгенерированный столбец.

Добавление столбцов

Синтаксис определения столбца для нового столбца почти такой же, как для столбца в операторе CREATE TABLE. Этот синтаксис позволяет поместить ограничение столбца в новый столбец в операторе ALTER TABLE ADD COLUMN. Однако столбец с ограничением NOT NULL можно добавить в существующую таблицу, если указать значение по умолчанию; в противном случае при выполнении инструкции ALTER TABLE выдается исключение.

Как и в CREATE TABLE, если определение столбца включает ограничение первичного ключа, столбец не может содержать значения NULL, поэтому необходимо также указать атрибут NOT NULL (SQLSTATE 42831).

Примечание. Если в таблице есть триггер UPDATE без явного списка столбцов, добавление столбца в эту таблицу фактически добавляет этот столбец в список столбцов неявного обновления, для которого определен триггер, и все ссылки на переменные перехода становятся недействительными. чтобы они выбрали новый столбец.

Если вы добавите сгенерированный столбец в таблицу, Derby вычислит сгенерированные значения для всех существующих строк в таблице.

Добавление ограничений

  • При добавлении внешнего ключа или проверочного ограничения к существующей таблице Derby проверяет таблицу, чтобы убедиться, что существующие строки удовлетворяют этому ограничению. Если какая-либо строка недействительна, Derby создает исключение инструкции, и ограничение не добавляется.
  • Все столбцы, включенные в первичный ключ, должны содержать ненулевые данные и быть уникальными.

ALTER TABLE ADD UNIQUE или PRIMARY KEY предоставляют сокращенный метод определения первичного ключа, состоящего из одного столбца. Если в определении столбца C указан PRIMARY KEY, эффект будет таким же, как если бы предложение PRIMARY KEY(C) было указано как отдельное предложение. Столбец не может содержать пустых значений, поэтому необходимо также указать атрибут NOT NULL.

Информацию о синтаксисе ограничений см. в разделе CONSTRAINT. Используйте синтаксис ограничения на уровне таблицы при добавлении ограничения с помощью синтаксиса ADD TABLE ADD CONSTRAINT.

Удаление столбцов

ALTER TABLE DROP COLUMN позволяет удалить столбец из таблицы.

Ключевое слово COLUMN указывать необязательно.

Ключевые слова CASCADE и RESTRICT также необязательны.Если вы не укажете ни CASCADE, ни RESTRICT, по умолчанию будет CASCADE.

Если вы укажете RESTRICT, удаление столбца будет отклонено, если это приведет к тому, что зависимый объект схемы станет недействительным.

Если вы укажете CASCADE, то при удалении столбца должны быть дополнительно удалены другие объекты схемы, которые стали недействительными.

Объекты схемы, которые могут привести к отклонению DROP COLUMN RESTRICT, включают: представления, триггеры, ограничения первичного ключа, ограничения внешнего ключа, ограничения уникального ключа, ограничения проверки и привилегии столбца. Если один из этих типов объектов зависит от удаляемого столбца, DROP COLUMN RESTRICT отклонит оператор.

Derby также вызывает ошибку, если указать RESTRICT при удалении столбца, на который ссылается предложение генерации сгенерированного столбца. Однако если вы укажете CASCADE, сгенерированный столбец также будет удален с семантикой CASCADE.

Вы не можете удалить последний (единственный) столбец в таблице.

CASCADE/RESTRICT не учитывает, используется ли удаляемый столбец в каких-либо индексах. Когда столбец удаляется, он удаляется из всех индексов, которые его содержат. Если этот столбец был единственным столбцом в индексе, весь индекс удаляется.

Удаление ограничений

ALTER TABLE DROP CONSTRAINT удаляет ограничение для существующей таблицы. Чтобы удалить безымянное ограничение, необходимо указать сгенерированное имя ограничения, хранящееся в SYS.SYSCONSTRAINTS, в качестве идентификатора с разделителями.

При удалении ограничения первичного ключа, уникального или внешнего ключа удаляется физический индекс, обеспечивающий соблюдение ограничения (также известный как резервный индекс).

Изменение столбцов

    Увеличение ширины существующего столбца VARCHAR или VARCHAR FOR BIT DATA. CHARACTER VARYING или CHAR VARYING могут использоваться как синонимы для ключевого слова VARCHAR.

Чтобы увеличить ширину столбца этих типов, укажите тип данных и новый размер после имени столбца.

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

Чтобы задать интервал между последовательными значениями столбца идентификаторов, укажите целочисленную константу. Вы должны предварительно определить столбец с атрибутом IDENTITY (SQLSTATE 42837). Если в таблице есть существующие строки, значения в столбце, для которого было добавлено значение по умолчанию SET INCREMENT, не изменяются.

Вы можете добавить ограничение NOT NULL к существующему столбцу. Для этого не должно быть существующих значений NULL для столбца в таблице.

Вы можете удалить ограничение NOT NULL из существующего столбца. Для этого столбец не должен использоваться в ограничении PRIMARY KEY.

Вы можете использовать значение по умолчанию DEFAULT, чтобы изменить значение столбца по умолчанию. Чтобы отключить ранее установленное значение по умолчанию, используйте DROP DEFAULT (в качестве альтернативы вы можете указать NULL в качестве значения по умолчанию).

Настройка значений по умолчанию

Вы можете указать значение по умолчанию для нового столбца. Значение по умолчанию — это значение, которое вставляется в столбец, если не указано другое значение. Если это не указано явно, значением столбца по умолчанию является NULL. Если вы добавите значение по умолчанию в новый столбец, существующие строки в таблице получат значение по умолчанию в новом столбце.

Дополнительную информацию о значениях по умолчанию см. в инструкции CREATE TABLE.

Изменение степени детализации блокировки для таблицы

Предложение LOCKSIZE позволяет переопределить блокировку на уровне строк для конкретной таблицы, если в вашей системе используется настройка блокировки на уровне строк по умолчанию. (Если ваша система настроена на блокировку на уровне таблицы, вы не можете изменить степень детализации блокировки на блокировку на уровне строки, хотя Derby позволяет вам использовать предложение LOCKSIZE в такой ситуации без создания исключения.) Чтобы переопределить блокировку на уровне строки для конкретной таблицы, установите для таблицы блокировку TABLE. Если вы создали таблицу с детализацией блокировки на уровне таблицы, вы можете изменить блокировку обратно на ROW с помощью предложения LOCKSIZE в операторе ALTER TABLE STATEMENT. Информацию о том, почему это иногда полезно, см. в разделе Настройка базы данных Java.

Примеры

Результаты

Инструкция ALTER TABLE вызывает перекомпиляцию всех инструкций, зависящих от изменяемой таблицы, перед их следующим выполнением. ALTER TABLE не допускается, если есть открытые курсоры, ссылающиеся на изменяемую таблицу.

Вывод: в этом руководстве вы узнаете, как использовать оператор Oracle ALTER TABLE ADD column для добавления одного или нескольких столбцов в таблицу.

Чтобы добавить новый столбец в таблицу, используйте оператор ALTER TABLE следующим образом:

В этом заявлении:

  • Во-первых, вы указываете имя таблицы, в которую хотите добавить новый столбец, после предложения ALTER TABLE.
  • Во-вторых, вы указываете имя столбца, тип данных и его ограничение.

Обратите внимание, что вы не можете добавить столбец, который уже существует в таблице; попытка сделать это вызовет ошибку. Кроме того, оператор ALTER TABLE ADD column добавляет новый столбец в конец таблицы. Oracle не предоставляет прямого способа указать позицию нового столбца, как в других системах баз данных, таких как MySQL.

Если вы хотите добавить более одного столбца, используйте следующий синтаксис:

В этом синтаксисе два столбца разделяются запятой.

Примеры столбца Oracle ALTER TABLE ADD

Давайте создадим таблицу с именем member для демонстрации.

Следующий оператор добавляет новый столбец с именем Birthday_date в таблицу участников:

В этом примере столбец «дата_рождения» является столбцом «ДАТА» и не может принимать значения NULL.

Предположим, вы хотите записать время создания и обновления строки. Для этого вам нужно добавить два столбца created_at и updated_at следующим образом:

Типы данных столбцов created_at и updated_at — TIMESTAMP WITH TIME ZONE . Эти столбцы также не принимают пустые значения.

Чтобы проверить, существует ли столбец в таблице, вы запрашиваете данные из представления user_tab_cols. Например, следующий оператор проверяет, есть ли в таблице участников столбец first_name.

Этот запрос удобен, когда вы хотите проверить, существует ли столбец в таблице перед его добавлением.

Например, следующий блок PL/SQL проверяет, есть ли в таблице участников столбец Effective_date перед его добавлением.

Если вы выполняете блокировку в первый раз, столбец Effective_date добавляется в конец таблицы участников. Однако, как только вы выполните его во второй раз, вы увидите следующее сообщение:

именно этого мы и ожидали.

Из этого руководства вы узнали, как использовать оператор Oracle ALTER TABLE ADD column для добавления одного или нескольких столбцов в существующую таблицу.

В этом учебном пособии Oracle объясняется, как использовать оператор Oracle ALTER TABLE для добавления столбца, изменения столбца, удаления столбца, переименования столбца или переименования таблицы (с синтаксисом, примерами и практическими упражнениями).

Описание

Инструкция Oracle ALTER TABLE используется для добавления, изменения или удаления/удаления столбцов в таблице. Оператор Oracle ALTER TABLE также используется для переименования таблицы.

Добавить столбец в таблицу

Синтаксис

Для ДОБАВЛЕНИЯ СТОЛБЦА в таблицу используется следующий синтаксис Oracle ALTER TABLE:

Пример

Давайте рассмотрим пример, показывающий, как добавить столбец в таблицу Oracle с помощью инструкции ALTER TABLE.

Этот пример Oracle ALTER TABLE добавит столбец с именем customer_name в таблицу customers с типом данных varchar2(45).

В более сложном примере вы можете использовать оператор ALTER TABLE, чтобы добавить новый столбец, который также имеет значение по умолчанию:

В этом примере столбец с именем city был добавлен в таблицу customers с типом данных varchar2(40) и значением по умолчанию "Сиэтл".

Добавить несколько столбцов в таблицу

Синтаксис

Для ДОБАВЛЕНИЯ НЕСКОЛЬКИХ СТОЛБЦОВ в существующую таблицу используется следующий синтаксис Oracle ALTER TABLE:

Пример

Давайте рассмотрим пример, показывающий, как добавить несколько столбцов в таблицу Oracle с помощью инструкции ALTER TABLE.

В этом примере Oracle ALTER TABLE будут добавлены два столбца: customer_name в виде поля varchar2(45) и city в виде поля varchar2(40) со значением по умолчанию ' Сиэтл" в таблицу customers.

Изменить столбец в таблице

Синтаксис

Чтобы ИЗМЕНИТЬ СТОЛБЦ в существующей таблице, Oracle ALTER TABLE использует следующий синтаксис:

Пример

Давайте рассмотрим пример, показывающий, как изменить столбец в таблице Oracle с помощью инструкции ALTER TABLE.

В этом примере Oracle ALTER TABLE столбец с именем customer_name изменит тип данных varchar2(100) и заставит столбец не допускать пустых значений.

В более сложном примере вы можете использовать оператор ALTER TABLE, чтобы добавить значение по умолчанию, а также изменить определение столбца:

В этом примере инструкция ALTER TABLE изменит столбец с именем city, чтобы он имел тип данных varchar2(75), значение по умолчанию будет установлено на "Сиэтл", а столбец будет установлен, чтобы не допускать пустых значений.

Изменить несколько столбцов в таблице

Синтаксис

Для ИЗМЕНЕНИЯ НЕСКОЛЬКИХ СТОЛБЦОВ в существующей таблице используется следующий синтаксис Oracle ALTER TABLE:

Пример

Давайте рассмотрим пример, показывающий, как изменить несколько столбцов в таблице Oracle с помощью инструкции ALTER TABLE.

В этом примере Oracle ALTER TABLE будут изменены столбцы customer_name и city. Столбец customer_name будет иметь тип данных varchar2(100) и не допускает пустых значений. Столбец city будет иметь тип данных varchar2(75), его значение по умолчанию будет установлено на "Сиэтл", а в столбце не будут приниматься нулевые значения.

Удалить столбец в таблице

Синтаксис

Чтобы УДАЛИТЬ СТОЛБЦ в существующей таблице, Oracle ALTER TABLE использует следующий синтаксис:

Пример

Давайте рассмотрим пример, показывающий, как удалить столбец в таблице Oracle с помощью оператора ALTER TABLE.

В этом примере Oracle ALTER TABLE будет удален столбец с именем customer_name из таблицы с именем customers.

Переименовать столбец в таблице
(НОВОЕ в Oracle 9i Release 2)

Синтаксис

Начиная с Oracle 9i Release 2 теперь вы можете переименовывать столбец.

Чтобы ПЕРЕИМЕНОВАТЬ СТОЛБЦ в существующей таблице, Oracle ALTER TABLE использует следующий синтаксис:

Пример

Давайте рассмотрим пример, показывающий, как переименовать столбец в таблице Oracle с помощью инструкции ALTER TABLE.

В этом примере Oracle ALTER TABLE столбец с именем customer_name переименовывается в cname.

Переименовать таблицу

Синтаксис

Для ПЕРЕИМЕНОВАНИЯ ТАБЛИЦЫ используется следующий синтаксис Oracle ALTER TABLE:

Пример

Давайте рассмотрим пример, показывающий, как переименовать таблицу в Oracle с помощью оператора ALTER TABLE.

В этом примере Oracle ALTER TABLE таблица customers будет переименована в contacts.

Исходя из приведенной ниже таблицы departments, переименуйте таблицу departments в depts.

Следующий оператор Oracle ALTER TABLE переименует таблицу departments в depts:

Исходя из приведенной ниже таблицы employees, добавьте столбец с именем bonus, который представляет собой числовой тип данных (6).

Следующий оператор Oracle ALTER TABLE добавит столбец bonus в таблицу employees:

Исходя из приведенной ниже таблицы customers, добавьте два столбца: один столбец с именем имя_контакта, тип данных varchar2(50), и один столбец с именем last_contacted это тип данных даты.

Следующий оператор Oracle ALTER TABLE добавит столбцы contact_name и last_contacted в таблицу customers:

Исходя из приведенной ниже таблицы employees, измените столбец employee_name на тип данных varchar2(75).

Следующий оператор Oracle ALTER TABLE изменит тип данных для столбца employee_name на varchar2(75):

Исходя из приведенной ниже таблицы customers, измените столбец customer_name, чтобы он НЕ допускал пустых значений, и измените столбец state на varchar2(2 ) тип данных.

Следующий оператор Oracle ALTER TABLE изменит столбцы customer_name и state в таблице customers соответствующим образом:

Исходя из приведенной ниже таблицы сотрудники, удалите столбец зарплата.

Следующий оператор Oracle ALTER TABLE удалит столбец salary из таблицы employees:

Исходя из приведенной ниже таблицы departments, переименуйте столбец department_name в dept_name.

Следующий оператор Oracle ALTER TABLE переименует столбец department_name в dept_name в таблице departments:

Операторы UNION, INTERSECT, MINUS и сортировка результатов запроса

Функция Oracle DECODE

Функция Oracle INSTR() с примерами

Функция Oracle TO_CHAR()

Числовые функции (математические функции)

Функции персонажа

Разные функции

Агрегированные функции

Функции даты и времени

Запросы на присоединение к Oracle

ГРУППИРОВКА ПО ЗАПРОСАМ, ПОДЗАПРОСЫ

Функции CUBE, ROLLUP

Oracle DML (ВСТАВИТЬ, ОБНОВИТЬ, УДАЛИТЬ.)

DDL Oracle (СОЗДАНИЕ, ИЗМЕНЕНИЕ, УДАЛЕНИЕ)

ЗАПИСАТЬСЯ, ОТКАТ, ТОЧКА СОХРАНЕНИЯ

Язык управления данными (GRANT, REVOKE)

Значения ПО УМОЛЧАНИЮ

Отключение ограничений

Отключение и включение

Проверка различных ограничений

Просмотреть информацию об ограничениях

Работа с датами

Представления Oracle

Последовательности Oracle

Синонимы Oracle

Индексы и кластеры

Изменение таблиц разделов

Удаление разделов

Объединение разделов

Разделение разделов

Объединение разделов

Объекты и типы объектов Oracle

Мы используем команду ALTER TABLE ADD COLUMN для добавления столбцов в существующую таблицу. С помощью этой команды мы можем добавить один столбец или несколько столбцов одновременно. Мы можем даже указать предложение NOT NULL, а также предложение DEFAULT.

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

ПРИМЕРЫ

Как добавить один столбец в существующую таблицу.

Допустим, у нас есть таблица с именем "emp" со следующей структурой.

Теперь мы хотим добавить в эту таблицу столбец "город". Для этого мы выполним следующую команду

После выполнения вышеуказанной команды структура таблицы будет выглядеть следующим образом

Чтобы заполнить значения в столбце CITY, нам нужно использовать команду UPDATE, чтобы установить значения города для разных сотрудников. Нравится

Как изменить таблицу, добавить несколько столбцов в существующую таблицу

Если вы хотите добавить несколько столбцов в таблицу сотрудников, вы можете сделать следующее заявление

Например, чтобы добавить адрес, пин-код, номер телефона, факс в таблицу сотрудников, мы дадим следующую команду

alter table emp add (addr varchar2(20),
pin varchar2(10),ph varchar2(20));

Как насчет добавления столбцов с ограничением NOT NULL

Как мы видели выше, когда мы добавляем столбец, столбец будет пустым, и нам нужно выполнить оператор UPDATE, чтобы заполнить значения в этом столбце. Итак, вопрос в том, можем ли мы добавить столбец с ограничением NOT NULL? Ответ: да, мы можем добавить столбец с ограничением NOT NULL, но должны быть выполнены два условия

Таблица должна быть либо пустой, либо, если таблица не пуста, необходимо также указать значение ПО УМОЛЧАНИЮ.

Если вы дадите следующую команду, когда таблица не пуста, вы получите следующую ошибку

Однако, если вы также укажете значение по умолчанию, все будет успешно

Изменить таблицу, добавив столбец PRIMARY KEY

Вы также можете добавить столбец в существующую таблицу с ограничением PRIMARY KEY, только если таблица пуста и в ней уже нет PRIMARY KEY.

Чтобы добавить столбец с ограничением PRIMARY KEY, введите следующую команду

Если вы попытаетесь добавить столбец с ограничением PRIMARY KEY, а таблица не пуста, произойдет следующая ошибка

или если столбец с ограничением первичного ключа уже существует, Oracle выдаст следующую ошибку

Читайте также: