Добавить столбец в таблицу oracle sql: ALTER TABLE ОПЕРАТОР — Oracle PL/SQL •MySQL •MariaDB •SQL Server •SQLite
Содержание
Oracle10gr1 ora-01754 a table may contain only one column of type LONG
База данных: 10g Выпуск 1
Код ошибки: ORA-01754
Описание: в таблице допустим только один столбец типа LONG
Причина: Была предпринята попытка добавить столбец LONG в таблицу, в которой уже был столбец LONG. Обратите внимание, что даже если столбец LONG, находящийся в данный момент в таблице, уже помечен как неиспользуемый, другой столбец LONG может быть добавлен только после удаления неиспользуемых столбцов.
Действие: Удалите столбец LONG, находящийся в данный момент в таблице, с помощью команды ALTER TABLE.
База данных: 10g Выпуск 1
Код ошибки: ORA-01754
Описание: a table may contain only one column of type LONG
Причина: An attempt was made to add a LONG column to a table which already had a LONG column. Note that even if the LONG column currently in the table has already been marked unused, another LONG column may not be added until the unused columns are dropped.
Действие: Remove the LONG column currently in the table by using the ALTER TABLE command.
База данных: 10g Выпуск 2
Код ошибки: ORA-01754
Описание: в таблице допустим только один столбец типа LONG
Причина: Была предпринята попытка добавить столбец LONG в таблицу, в которой уже был столбец LONG. Обратите внимание, что даже если столбец LONG, находящийся в данный момент в таблице, уже помечен как неиспользуемый, другой столбец LONG может быть добавлен только после удаления неиспользуемых столбцов.
Действие: Удалите столбец LONG, находящийся в данный момент в таблице, с помощью команды ALTER TABLE.
База данных: 11g Выпуск 1
Код ошибки: ORA-01754
Описание: в таблице допустим только один столбец типа LONG
Причина: Была предпринята попытка добавить столбец LONG в таблицу, в которой уже был столбец LONG. Обратите внимание, что даже если столбец LONG, находящийся в данный момент в таблице, уже помечен как неиспользуемый, другой столбец LONG может быть добавлен только после удаления неиспользуемых столбцов.
Действие: Удалите столбец LONG, находящийся в данный момент в таблице, с помощью команды ALTER TABLE.
База данных: 11g Выпуск 2
Код ошибки: ORA-01754
Описание: в таблице допустим только один столбец типа LONG
Причина: Была предпринята попытка добавить столбец LONG в таблицу, в которой уже был столбец LONG. Обратите внимание, что даже если столбец LONG, находящийся в данный момент в таблице, уже помечен как неиспользуемый, другой столбец LONG может быть добавлен только после удаления неиспользуемых столбцов.
Действие: Удалите столбец LONG, находящийся в данный момент в таблице, с помощью команды ALTER TABLE.
База данных: 12c Выпуск 1
Код ошибки: ORA-01754
Описание: в таблице допустим только один столбец типа LONG
Причина: Была предпринята попытка добавить столбец LONG в таблицу, в которой уже был столбец LONG. Обратите внимание, что даже если столбец LONG, находящийся в данный момент в таблице, уже помечен как неиспользуемый, другой столбец LONG может быть добавлен только после удаления неиспользуемых столбцов.
Действие: Удалите столбец LONG, находящийся в данный момент в таблице, с помощью команды ALTER TABLE.
База данных: 12c Выпуск 2
Код ошибки: ORA-01754
Описание: в таблице допустим только один столбец типа LONG
Причина: Была предпринята попытка добавить столбец LONG в таблицу, в которой уже был столбец LONG. Обратите внимание, что даже если столбец LONG, находящийся в данный момент в таблице, уже помечен как неиспользуемый, другой столбец LONG может быть добавлен только после удаления неиспользуемых столбцов.
Действие: Удалите столбец LONG, находящийся в данный момент в таблице, с помощью команды ALTER TABLE.
База данных: 18c Выпуск 1
Код ошибки: ORA-01754
Описание: в таблице допустим только один столбец типа LONG
Причина: Была предпринята попытка добавить столбец LONG в таблицу, в которой уже был столбец LONG. Обратите внимание, что даже если столбец LONG, находящийся в данный момент в таблице, уже помечен как неиспользуемый, другой столбец LONG может быть добавлен только после удаления неиспользуемых столбцов.
Действие: Удалите столбец LONG, находящийся в данный момент в таблице, с помощью команды ALTER TABLE.
База данных: 18c Выпуск 1
Код ошибки: ORA-01754
Описание: в таблице допустим только один столбец типа LONG
Причина: Была предпринята попытка добавить столбец LONG в таблицу, в которой уже был столбец LONG. Обратите внимание, что даже если столбец LONG, находящийся в данный момент в таблице, уже помечен как неиспользуемый, другой столбец LONG может быть добавлен только после удаления неиспользуемых столбцов.
Действие: Удалите столбец LONG, находящийся в данный момент в таблице, с помощью команды ALTER TABLE.
База данных: 19c Выпуск 1
Код ошибки: ORA-01754
Описание: в таблице допустим только один столбец типа LONG
Причина: Была предпринята попытка добавить столбец LONG в таблицу, в которой уже был столбец LONG. Обратите внимание, что даже если столбец LONG, находящийся в данный момент в таблице, уже помечен как неиспользуемый, другой столбец LONG может быть добавлен только после удаления неиспользуемых столбцов.
Действие: Удалите столбец LONG, находящийся в данный момент в таблице, с помощью команды ALTER TABLE.
База данных: 19c Выпуск 1
Код ошибки: ORA-01754
Описание: в таблице допустим только один столбец типа LONG
Причина: Была предпринята попытка добавить столбец LONG в таблицу, в которой уже был столбец LONG. Обратите внимание, что даже если столбец LONG, находящийся в данный момент в таблице, уже помечен как неиспользуемый, другой столбец LONG может быть добавлен только после удаления неиспользуемых столбцов.
Действие: Удалите столбец LONG, находящийся в данный момент в таблице, с помощью команды ALTER TABLE.
Библиотека кодов ошибок базы данных Oracle
- _10gR1 Коды ошибок
- _10gR2 Коды ошибок
- _11gR1 Коды ошибок
- _11gR2 Коды ошибок
- _12cR1 Коды ошибок
- _12cR2 Коды ошибок
- _18cR1 Коды ошибок
- _19cR1 Коды ошибок
Параметры базы данных Oracle
- Список параметров
Пакеты баз данных Oracle
Список пакетов
- Список пакетов
- _Пакеты Oracle Database 12cR1
- _Пакеты Oracle Database 11gR2
- _Пакеты Oracle Database 11gR1
- _Пакеты Oracle Database 10gR2
Словарь данных базы данных Oracle
- _База данных Oracle 10gR2 Словарь данных
- _База данных Oracle 11gR2 Словарь данных
- _База данных Oracle 12cR1 Словарь данных
- _База данных Oracle 12cR2 Словарь данных
- _База данных Oracle 18cR1 Словарь данных
- _База данных Oracle 19cR1 Словарь данных
Построение баз данных в среде Oracle
Построение баз данных в среде Oracle
Оглавление
|
addColumn
Фильтр:
Отправить поиск
addColumn
Тип изменения добавляет новый столбец в существующую таблицу.
Использование
Обычно вы можете использовать тип изменения addColumn
, когда хотите добавить новый столбец и развернуть его в таблице в базе данных.
Запуск
addColumn
Тип изменения
Чтобы создать столбец для таблицы, выполните следующие действия:
- Добавьте
addColumn
Тип изменения в набор изменений с необходимыми атрибутами, как показано в примерах. - Разверните свой набор изменений, выполнив команду
update
:
liquibase update
Теперь вы должны увидеть новый столбец.
Доступные атрибуты
Имя | Описание | Требуется для | Поддерживает |
---|---|---|---|
Название каталога
|
Название каталога |
все | |
имя_схемы
|
Название схемы |
все | |
имя_таблицы
|
Имя таблицы для добавления столбца |
все | все |
Вложенные теги
Имя | Описание | Требуется для | Поддерживает | Разрешено несколько |
---|---|---|---|---|
столбец
|
Ограничение столбца и информация о внешнем ключе. Установка атрибута Примечание: Журналы изменений YAML и JSON, использующие тег |
все | все | да |
Пример XML
<автор набора изменений = "liquibase-docs"><имя столбца="адрес" позиция = "2" тип="varchar(255)"/> <столбец после столбца = "id" имя = "имя" тип="varchar(50)"> <ограничения nullable="false" />
Пример YAML
databaseChangeLog: - набор изменений: id: пример addColumn автор: liquibase-docs изменения: - добавить столбец: имя_таблицы: человек столбцы: - столбец: имя: отчество тип: varchar(50)
Пример JSON
{ «набор изменений»: { "id":"addColumn-пример", "автор":"liquibase-docs", "изменения":[ { "добавить столбец": { "имякаталога":"кошка", "столбцы": [ { "столбец":{ "Название Адрес", "позиция":2, «тип»: «varchar (255)» } }, { "столбец":{ "послеколонка":"идентификатор", "ограничения": { "обнуляемый": ложь }, "имя":"имя", "тип":"varchar(50)" } } ], "ИмяСхемы":"общедоступный", "имя_таблицы":"человек" } } ] } }
Пример SQL
ALTER TABLE cat.person ADD address VARCHAR(255) NULL, ДОБАВИТЬ имя VARCHAR(50) NOT NULL ПОСЛЕ `id`;
Поддержка базы данных
База данных | Примечания | Автоматический откат |
---|---|---|
DB2/LUW | Поддерживается | Да |
DB2/z | Поддерживается | Да |
Дерби | Поддерживается | Да |
Жар-птица | Поддерживается | Да |
h3 | Поддерживается | Да |
ГиперSQL | Поддерживается | Да |
ИНГРЕС | Поддерживается | Да |
Информикс | Поддерживается | Да |
МарияДБ | Поддерживается | Да |
MySQL | Поддерживается | Да |
Оракул | Поддерживается | Да |
PostgreSQL | Поддерживается | Да |
Снежинка | Поддерживается | Да |
SQL Server | Поддерживается | Да |
SQLite | Поддерживается | Да |
Сибаза | Поддерживается | Да |
Sybase Anywhere | Поддерживается | Да |
Добавление столбца не NULL в таблицу с данными
Алексей Зубков
Алексей Зубков
Разработка и администрирование базы данных Oracle | SQL, разработка PL/SQL | Моделирование данных | Разработка программного обеспечения | Инженерная техническая поддержка | Системный анализ
Опубликовано 14 октября 2020 г.
+ Подписаться
Добавление нового столбца в существующую таблицу, вероятно, является одной из наиболее распространенных задач при поддержке моделей данных и баз данных. В этой статье мы рассмотрим два подхода к добавлению столбца NOT NULL в таблицу Oracle, в которой уже есть данные.
Для иллюстрации подходов мы будем использовать следующую таблицу PRODUCT_DESC_T:
В таблице хранятся описания, относящиеся к различным продуктам. Мы понимаем, что в таблице должен быть еще один столбец PRODUCT_ID, указывающий на основной список продуктов в таблице PRODUCT_T.
Прямая попытка добавить новый столбец NOT NULL приводит к ошибке:
Неудивительно: успешное выполнение приведенного выше оператора приведет к значению NULL PRODUCT_ID в существующих строках. Очевидно, это противоречило бы объявлению столбца NOT NULL.
Чтобы преодолеть это, мы можем использовать следующие два подхода.
Подход 1. Добавьте столбец NOT NULL со специальным значением по умолчанию, например. 999 или -1, что будет обозначать отсутствующие данные. Новый столбец автоматически заполняется 999:
Идя по этому пути, мы должны постоянно использовать одно и то же значение 999 во всей базе данных всякий раз, когда мы применяем этот подход. В то же время мы должны убедиться, что значение 999 нигде не представляет собой реальные данные. Например. Последовательности Oracle должны начинаться со значения больше 999. Кроме того, если мы хотим усилить связь, создав ограничение FK для таблицы PRODUCT_T, мы должны вставить фиктивную запись 999 в таблицу, на которую указывает ссылка. То есть, несмотря на то, что подход 1 выглядит простым и понятным, он требует накладных расходов. Наконец, это не очень похоже на «Oracle» способ представления отсутствующих данных — для этого в базе данных есть NULL.
Подход 2. Другой способ добавить столбец NOT NULL в таблицу с данными – использовать ограничение NOVALIDATE:
При применении подхода 2 существующие строки имеют значения NULL в новом столбце. Однако, чтобы вставить новую строку, для PRODUCT_ID требуется значение NOT NULL.
Ограничение проверки, добавленное во втором операторе alter table выше, требует пользовательского имени — PROD_DESC_CHK_NN_03 в нашем примере. Хотя сгенерированное системой имя ограничения, такое как «SYS_C007781», несет мало информации, мы можем использовать собственное имя ограничения для обозначения следующих деталей:
- Таблица, к которой относится ограничение «PROD_DESC»
- Столбец, к которому применяется ограничение — «03» — это порядковый номер столбца PRODUCT_ID, отображаемый в представлении DBA_TAB_COLUMN
- Тип ограничения и проверка, которую оно выполняет: « CHK_NN» — проверочное ограничение, подтверждающее значение NOT NULL
Последний пункт особенно важен для 11g и более ранних версий базы данных Oracle. Столбец DBA_CONTRAINT.SEARCH_CONDITION, описывающий проверку, которую выполняет ограничение, имеет тип данных LONG. Таким образом, его необходимо преобразовать в VARCHAR2, чтобы он стал удобочитаемым и доступным для поиска.
Примечательно, что подход 2 можно реализовать только в два отдельных этапа. Попытка добавить новый столбец с ограничением NOT NULL и опцией NOVALIDATE в одном операторе приводит к ошибке:
Из-за поведения NULL в операциях сравнения, вот побочный эффект использования второго подхода. После добавления нового ограничения NOT NULL NOVALIDATE и вставки в таблицу дополнительных данных выбор по PRODUCT_ID «игнорирует» записи, существовавшие в таблице до добавления нового столбца.
Однако при первом подходе нужно не забыть добавить «product_id > 999» в предложение where, по крайней мере, для некоторых запросов.
Какой из двух подходов использовать? Поверьте, наиболее важным соображением является то, что выбранный подход должен соответствовать текущему дизайну базы данных. Например. используется ли число или строка в базе данных для представления отсутствующих данных.
Алексей Зубков — разработчик базы данных Oracle, администратор и специалист по моделированию данных.