Изменение столбцов в таблице
Изменение столбцов в таблице
Существующие столбцы в таблице могут быть изменены в нескольких отношениях, а именно:
* имя столбца может быть изменено на другое имя, не используемое в таблице;
* столбец может быть "перенесен" на другую позицию в системе упорядочивания столбцов слева направо;
* возможно преобразование несимвольных данных в символьные с некоторыми ограничениями.
Синтаксис
Используйте следующий синтаксис для ALTER TABLE:
ALTER TABLE таблица
ALTER [COLUMN] имя-простого-столбца изменение;
изменение = новое-имя-столбца | новый-тип-столбца | новая-позиция-столбца
новое-имя-столбца = ТО имя-простого-столбца
новый-тип-столбца = TYPE тип-данных-или-домен
новая-позиция-столбца = POSITION целое
! ! !
ПРИМЕЧАНИЕ. Если вы пытаетесь переименовать столбец, вы можете неожиданно получить проблемы зависимостей, если на столбец существуют ссылки из ограничений или он используется в просмотрах, триггерах или хранимых процедурах.
. ! .
Примеры
Здесь мы изменяем имя столбца с EMP_NO на EMP_NUM:
ALTER TABLE EMPLOYEE
ALTER COLUMN EMP_NO TO EMP_NUM;
/* ключевое слово COLUMN необязательно */
Теперь изменяется позиция столбца:
ALTER TABLE EMPLOYEE
ALTER COLUMN EMP_NUM POSITION 4;
В этот раз тип данных EMP_NUM заменяется с INTEGER на VARCHAR (20):
ALTER TABLE EMPLOYEE
ALTER COLUMN EMP_NUM TYPE VARCHAR(20) ;
Ограничения при изменении типа данных
Firebird не позволит вам изменить тип данных столбца или домена, в результате чего могут потеряться данные.
* Новое определение столбца должно позволять использовать существующие данные. Если, например, новый тип данных имеет слишком много байтов, или не поддерживается преобразование типов данных, то возвращается ошибка, и изменения не выполняются.
* Когда числовые типы преобразуются в строковый тип, каждый числовой тип рассматривается как предмет с минимальной длиной в байтах в соответствии с типом (см. рис. 8.1).
* Преобразование символьных данных в несимвольные недопустимо.
* Столбцы массивов и BLOB не могут быть преобразованы.
! ! !
ВНИМАНИЕ! Любые изменения определения полей могут потребовать пересоздания индексов.
. ! .