Проектирование схемы приложения. Эффективное использование синонимов в схеме приложения, страница 8

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

Примечание

Для изменения таблицы с помощью команды ALTERTABLEвы должны быть владельцем таблицы или иметь системные полномочия ALTERANYTABLE.

Добавление и модификация столбцов

Один из способов изменения таблицы состоит в модификации существующего столбца или добавлении другого столбца, который вы забыли включить. Ключе­вые слова ADD и MODIFY команды ALTER TABLE позволяют вам легко изме­нять структуру существующей таблицы. Приведем несколько примеров. показывающих, как можно использовать команду ALTER TABLE для добавления или изменения определений столбцов:

ALTER TABLE customer ADD (fax VARCHAR2(10))

ALTER TABLE customer MODIFY (fax VARCHAR2(10))

ALTER TABLE sales.orders MODIFY (status CHAR(1) DEFAULT null)

Первый оператор добавляет к таблице CUSTOMER новый столбец — номер факса покупателя. Второй оператор модифицирует новый столбец FAX, расширяя его максимальную длину. Третий оператор изменяет в таблице ORDERS заданное по умолчанию выражение столбца STATUS.

   Примечание

Ключевое слово MODIFY  можно использовать также для уменьшения размера столбца или его типа данных. Однако Oracle7 позволяет вам выполнять эти опера­ции только в том случае, когда столбец содержит зна­чения NULL.

Добавление и модификация ограничений целостности

Правила, хотя это и правила, также могут изменяться. Если вы решили изменить связанные с таблицей правило целостности, то можете использовать ключевые слова ADD, MODIFY и DROP команды ALTER TABLE. Чтобы удалять и добав­лять ограничения с помощью команды ALTER TABLE, нужно знать кое-что о синтаксисе SQL Oracle:

·   Чтобы добавить новые ограничения целостности отдельно от нового опреде­ления столбца в предложении ADD clause, можно использовать ключевые слова PRIMARY KEY, UNIQUE, FOREIGN KEY и CHECK (как в команде CRE­ATE TABLE).

·   Для удаления ограничений целостности в предложении DROP вы можете ис­пользовать ключевые слова PRIMARY KEY и UNIQUE KEY (для удаления основного или уникального ключа) или CONSTRAINT (для удаления ограни­чений FOREIGN KEY и CHECK по их именам).

Следующие операторы показывают, как можно использовать эти ключевые слова для модификации ограничений целостности таблицы

ALTER TABLE customer ADD (fax VARCHAR2(20) NOT NULL)

ALTER TABLE customer MODiFY (fax VARCHAR2(20) NULL)

ALTER TABLE customer ADD (PRIMARY KEY (id))

ALTER TABLE customer DROP UNIQUE (lastname, firstname)

ALTER TABLE customer DROP PRiMARY KEY CASCADE

 ALTER TABLE customer DROP CONSTANT sys0991

Первый оператор в чем-то повторяет предыдущий пример, однако показывает, что добавить к таблице новый столбец вы можете одновременно с определением в столбце нового ограничения ссылочной целостности. Второй пример показывает, как удалить из определения столбца ограничение целостности NOT NULL. Третий пример демонстрирует добавление ограничения целостности PRIMARY KEY, а в остальных вы можете видеть, как удаляются конкретные ограничения целостности. Обратите внимание на оператор, удаляющий в таблице CUSTOMER первичный ключ: в него включено ключевое слово CASCADE, задающее каскадное удаление первичного ключа для всех зависящих от него внешних ключей.

Определение имен для ограничений целостности

Чтобы определить имена для различных ограничений целостности базы дан­ных. вы можете запросить их в словаре данных DBA_CONSTRAINTS или USER_CONSTRAINTS. Например, следующий запрос возвращает имена всех ограничений для таблицы ITEM:

SELECT constraint_name, constraint_type, search_condition

 FROM sys.dba_constraints

WHERE owner = 'SALES'

AND table_name = ITEM;

CONSTRAINT_NAME      С SEARCH_CONDITION

SYS_C00436                  С STOCKID IS NOT NULL

SYS_C00437                  С QUANTITY IS NOT NULL

SYS_C00438                     P

 SYS_C00439                 R

SYS_C00440                  R