Оператор изменения схемы таблицы
Оператор изменения схемы таблицы (ALTERTABLE), для которого не было аналогов в стандарте SQL/89, предназначен для изменений в начальном определении таблицы. Оператор имеет следующий синтаксис:
<alter table statement> ::= ALTER TABLE <table name> <alter table action> <alter table action> ::= <add column definition> |<alter column definition> |<drop column definition> |<add table constraint definition> |<drop table constraint definition>
Пояснения:
Можно изменять схему любой базовой таблицы за исключением объявляемой локальной временной таблицы.
Определение добавления столбца позволяет добавить к таблице новый столбец. Конструкция имеет следующий синтаксис:
<add column definition> ::= ADD [ COLUMN ] <column definition>
Пояснения:
Каждое значение, содержащееся в столбце после его добавления к таблице, есть значение этого столбца по умолчанию. Спецификация определения столбца в операторе ALTERTABLE имеет то же действие, что спецификация определения столбца в определении таблицы. В частности, степень таблицы увеличивается на единицу, и порядковый номер добавляемого столбца устанавливается равным новой степени таблицы.
Определение изменения столбца позволяет установить или отменить значение этого столбца по умолчанию. Конструкция имеет следующий синтаксис:
<alter column definition> ::= ALTER [ COLUMN ] <column name> <alter column action> <alter column action> ::= <set column default clause> |<drop column default clause> <set column default clause> ::= SET <default clause> <drop column default clause> ::= DROP DEFAULT
Пояснения:
В результате выполнения спецификации описатель существующего столбца таблицы изменяется в соответствии с указанным действием. Если указано DROPDEFAULT, соответствующий столбец должен иметь значение по умолчанию.
Определение удаления столбца позволяет ликвидировать указанный столбец таблицы. Конструкция имеет следующий синтаксис:
<drop column definition> ::= DROP [ COLUMN ] <column name> <drop behavior> <drop behavior> ::= CASCADE | RESTRICT
Пояснения:
Если в определении удаления столбца указано RESTRICT, то на удаляемый столбец не должно быть ссылок в выражении запроса любого существующего представления и в условии поиска любого существующего ограничения, кроме табличных ограничений, ссылающихся только на этот столбец и входящих в описание данной таблицы. Если в определении удаления столбца указано CASCADE, то любой зависимый объект уничтожается при выполнении неявного оператора REVOKE (см. ниже). Пусть A обозначает текущий идентификатор авторизации. Пусть T - имя таблицы, для которой выполняется оператор ALTERTABLE, а C - имя удаляемого столбца. Тогда при удалении столбца неявно выполняется следующий оператор от имени текущего системного идентификатора авторизации: REVOKEINSERT(CN), UPDATE(CN), REFERENCES(CN) ONTABLETN FROMACASCADE. Пусть V - имя любого представления, ссылающегося на столбец C таблицы T. При удалении столбца неявно выполняется следующий оператор от имени текущего системного идентификатора авторизации: DROPVIEWVNCASCADE. Идентифицируемый столбец и его описатель уничтожаются. Степень T уменьшается на единицу. Порядковые номера всех столбцов с порядковым номером больше чем у C уменьшаются на единицу.
Определение добавления табличного ограничения имеет следующий синтаксис:
<add table constraint definition> ::= ADD <table constraint definition>
Это определение не нуждается в пояснениях.
Определение уничтожения табличного ограничения имеет следующий синтаксис:
<drop table constraint definition> ::= DROP CONSTRAINT <constraint name> <drop behavior>
Пояснения:
Пусть T имя таблицы, упоминаемой в операторе ALTERTABLE, а TC - имя уничтожаемого ограничения целостности. Если TC является ограничением уникальности и существует ссылочное ограничение RC со ссылкой на таблицу T по столбцам уникальности TC, то будем говорить, что RC зависит от TC. Если указано RESTRICT, то никакое табличное ограничение не должно зависеть от TC. Если указано CASCADE, то все зависимые объекты уничтожаются при выполнении неявного оператора ALTERTABLE (см. ниже). Пусть TCN2 - имя любого табличного ограничения, зависящего от TC, и пусть T2 - имя таблицы, определение которой включало TCN2. Тогда выполняется неявный оператор ALTERTABLET2 DROPCONSTRAINTTCN2 CASCADE. Описатель TC удаляется из описания таблицы T. Идентифицированное табличное ограничение и его описатель разрушаются.
Содержание раздела