|
Справочное руководство по языку SQL 5-10
ARCHIVELOG соответственно разрешает и
NOARCHIVELOG запрещает архивирование.
MOUNT определяет, на что изменить
DISMOUNT статус базы данных: монтиро-
вать или размонтировать. Для
большинства видов действий
база данных должна быть мон-
тирована и открыта. Некоторые
операции по сопровождению ба-
зы требуют, чтобы она была
монтированной, но не откры-
той.
Детально фраза MOUNT описыва-
ется в "ORACLE RDBMS
Руководстве администратора
базы данных".
OPEN указывает, что база данных
CLOSE должна быть открыта и доступ-
на для нормального к ней об-
ращения или закрыта и недос-
тупна.
За полным описанием фразы
OPEN обратитесь к документу
"ORACLE RDBMS Руководство ад-
министратора базы данных".
Замечания по Приемлемость опций зависит от текущего состо-
использованию яния базы данных:
если база данных: Вы можете использовать:
не монтирована только MOUNT
монтирована, но не открыта все, кроме MOUNT и CLOSE
открыта только CLOSE
SIZE и REUSE Если специфицировано SIZE, а REUSE - опущено,
будет создаваться файл указанного размера
(его не должно быть на диске). Если указаны
оба параметра, то в случае отсутствия файла -
он создается, а при наличии - проверяется его
размер. Если указано только REUSE или не ука-
зано ничего, файл должен существовать и оста-
ваться такого же размера.
Некоторые аргументы требуют дополнительные
действия со стороны DBA, например - распреде-
ление и подготовка файлов для опции REUSE или
выполнение backup, если используется режим
ARCHIVELOG.
В общем случае рекомендуется перед изменением
базы закрыть ее и размонтировать. За дополни-
тельной информацией об операторе ALTER
DATABASE обратитесь к "ORACLE RDBMS Руководс-
-- 91 --
тву администратора базы данных".
Справочник по SQL - операторам 5-11
Примеры Чтобы монтировать базу в исключительном режиме:
ALTER DATABASE dbname MOUNT EXCLUSIVE
Чтобы открыть уже монтированную базу данных:
ALTER DATABASE OPEN
Для переключения в режим архивирования файлов
журнала:
ALTER DATABASE ARCHIVELOG
Для добавления файла журнала:
ALTER DATABASE
ADD LOGFILE dblog3.log SIZE 50000
Связанные Оператор CREATE DATABASE; команды SQL*DBA:
темы STARTUP и SHUTDOWN (В Приложении В к "ORACLE
RDBMS Руководство администратора базы данных")
Справочное руководство по языку SQL 5-12
-- 92 --
E ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ F
E ALTER INDEX F
Назначение Изменение будущих характеристик распределения
памяти для блоков индекса.
Предпосылки Вы должны быть либо владельцем индекса, либо
иметь привилегию DBA.
Синтаксис ALTER INDEX [user.]index
[INITRANS integer] [MAXTRANS integer]
[STORAGE storage]
Ключевые слова user имя пользователя владельца индекса
и параметры
index имя индекса
INITRANS integer (Обратитесь к ниже к параметру
INITRANS в описании оператора
CREATE TABLE).
MAXTRANS integer (Обратитесь к ниже к параметру
MAXTRANS в описании оператора
CREATE TABLE).
STORAGE storage (См. ниже описание фразы
STORAGE).
Замечания по Параметры INITRANS, MAXTRANS и STORAGE имеют
использованию то же значение, что и в операторе CREATE TABLE
Пример Для того, чтобы изменить индекс CUSTOMER
пользователя SCOTT таким образом, что будущие
блоки ORACLE в этом индексе использовали на-
чально 5 элементов транзакций и дополнитель-
ный экстент был размером 100 Килобайтов, вве-
дите:
ALTER INDEX SCOTT.CUSTOMER
INITRANS 5
STORAGE (NEXT 100K)
Связанные Операторы CREATE INDEX и CREATE TABLE; фраза
темы STORAGE.
Справочник по SQL - операторам 5-13
-- 93 --
E ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ F
E ALTER ROLLBACK SEGMENT F
Назначение Изменить параметры памяти существующего сег-
мента отката.
Предпосылки Требуется привилегия DBA.
Синтаксис ALTER [PUBLIC] ROLLBACK SEGMENT rollback_segment
STORAGE storage
Ключевые слова
и параметры
PUBLIC Говорит что существующий сег-
мент отката - общий.
rollback_segment Специфицирует имя существую-
щего сегмента отката.
STORAGE storage. См. описание синтаксиса фра-
зы STORAGE далее в этой главе.
Замечания по В операторе ALTER ROLLBACK SEGMENT фраза
использованию STORAGE влияет лишь на будущее распределение
памяти в указанном сегменте отката. Следова-
тельно аргументы INITIAL и MINEXTENTS для из-
менения существующего сегмента отката приме-
нять нельзя.
Имейте в виду, что оператор ALTER ROLLBACK
SEGMENT нельзя для смены статуса сегмента от-
ката с PUBLIC на private и наоборот. Для про-
изведения таких изменений необходимо отменить
сегмент и создать заново с нужной характерис-
тикой.
Примеры Чтобы изменить параметры памяти сегмента RSONE:
ALTER ROLLBACK SEGMENT RSONE
STORAGE (NEXT 1000 MAXEXTENTS 20
PCTINCREASE 0)
Связанные Операторы CREATE DATABASE, CREATE ROLLBACK
темы SEGMENT, CREATE TABLESPACE; фраза STORAGE.
Справочное руководство по языку SQL 5-14
-- 94 --
E ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ F
E ALTER SEQUENCE F
Назначение Изменить опции последовательности в одном из
следующих направлений:
* изменить на будущее шаг между соседними
последовательными номерами.
* установить MINVALUE или MAXVALUE или выклю-
чить один или оба этих параметра.
* включить/выключить действие параметра CACHE
* включить/выключить действие параметра ORDER
Предпосылки Вы должны быть владельцем последовательности,
иметь предоставленные к ней привилегии или
иметь привилегию DBA.
Синтаксис ALTER SEQUENCE [user.]sequence
[INCREMRNT BY integer]
[MAXVALUE integer | NOMAXVALUE]
[MINVALUE integer | NOMINVALUE]
[CYCLE | NOCYCLE]
[CACHE integer | NOCACHE]
[ORDER | NOORDER]
Ключевые слова user имя пользователя для владельца
и параметры последовательности.
sequence имя существующей последователь-
ности.
INCREMENT BY Специфицирует инкремент для
integer будущей последовательности.
MAXVALUE | Специфицирует новый макси-
NOMAXVALUE мальный последовательный но-
мер или делает его неограни-
ченным.
MINVALUE | Специфицирует новый мини -
NOMINVALUE мальный последовательный но-
мер или делает его неограни-
ченным.
CYCLE | Определяет переключение на
NOCYCLE номер MINVALUE, когда в воз-
растающей последовательности
достигается MAXVALUE; и пе-
реключение на MAXVALUE для
убывающей последовательности.
CACHE integer | Определяет, будут ли хранить-
NOCHACE ся в памяти будущие последо-
вательные номера (для ускоре-
ния доступа). Предполагается
20. CACHE должен быть меньше
разницы между MAXVALUE и
MINVALUE.
ORDER | Cпецифицирует, будет ли ORACLE
NOORDER или - нет генерировать после-
довательные номера в порядке
-- 95 --
запроса. Обычно, такая гене-
рация производится без ука-
зания ORDER.
Справочник по SQL - операторам 5-15
Замечания по Для того, чтобы начать последовательность с
использованию другого номера, ее надо отменить и создать
заново. Оператор ALTER SEQUENCE влияет только
на будущие последовательные номера.
Выполняются некоторые проверки правильности
задания оператора. Например - невозможно наз-
начить новое MAXVALUE, если оно меньше теку-
щего последовательного номера.
Примеры Для установки нового максимального значения по-
следовательности ESEQ, введите:
ALTER SEQUENCE ESEQ MAXVALUE 1500
Для включения CYCLE и CACHE наберите:
ALTER SEQUENCE ESEQ CYCLE CACHE 5
Связанные Операторы CREATE SEQUENCE и DROP SEQUENCE.
темы
Справочное руководство по языку SQL 5-16
-- 96 --
E ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ F
E ALTER SESSION F
Назначение Включает или отключает в текущем сеансе
средство трассировки SQL.
Предпосылки Нет.
Синтаксис ALTER SESSION
SET SQL_TRACE {TRUE | FALSE}
Ключевые слова TRUE включает средство трассировки SQL
и параметры FALSE отключает средство трассировки SQL
Замечания по Средство трассировки SQL генерирует статисти-
использованию ку производительности обработки SQL - опера-
торов. Для включения средства трассировки SQL
- операторов в Вашем сеансе выполните команду
ALTER SESSION с ключевым словом TRUE. Для
выключения средства трассировки выполните ко-
манду ALTER SESSION с ключевым словом FALSE.
Можно также активизировать средство трасси-
ровки SQL для всех сеансов данного экземпляра
ORACLE, установив в TRUE параметр файла INIT.
ORA: SQL_TRACE. В этом случае Вы можете вык-
лючить трассировку отдельного сеанса, выдав в
нем команду ALTER SESSION с ключевым словом
FALSE.
Не выдавайте команду ALTER SESSION в тригге-
рах SQL*Forms. Для информации об активации и
деактивации средства трассировки SQL обрати-
тесь к Главе 23 - "Компоненты" и Главе 26 -
"Опции" документа "Справочник разработчика по
SQL*Forms".
Более подробная информация о средстве трасси-
ровки SQL (включая форматирование и интерпре-
тацию результатов) дается в Главе 7 - "Средс-
тва диагностики производительности" документа
"ORACLE RDBMS Руководство по настройке произ-
водительности".
Примеры Для активации средства трассировки SQL в Ва-
шем сеансе выполните оператор:
ALTER SESSION SET SQL_TRACE TRUE
Для деактивации средства, выполните следующую
команду:
ALTER SESSION SET SQL_TRACE FALSE
-- 97 --
Связанные Глава 7 - "Средства диагностики производи-
темы тельности" документа "ORACLE RDBMS Руководс-
тво по настройке производительности".
Справочник по SQL - операторам 5-17
E ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ F
E ALTER TABLE F
Назначение Меняет определение таблицы:
* добавляя столбцы или ограничения
* модифицируя определения существующих столб-
цов (например - тип данных или NOT NULL).
* отменяя ограничения
* модифицируя будущее распределение памяти
* отмечая, что для данной таблицы был выпол-
нен backup
Предпосылки Вы должны быть владельцем таблицы, получить
на нее привилегию ALTER или иметь привилегию
DBA.
Синтаксис ALTER TABLE [user.]table
[ADD ({column_element|table_constraint}
[,{column_element|table_constraint}]...)]
[MODIFY (column_element [,column_element]...)]
[DROP CONSTRAINT constraint]...
[PCTFREE integer] [PCTUSED integer]
[INITRANS integer] [MAXTRANS integer]
[STORAGE storage]
[BACKUP]
Ключевые слова [user.]table имя существующего пользовате-
и параметры ля для таблицы, которую Вы
хотите изменить. По умолчанию
в качестве user предполагает-
ся пользователь, выдавший ко-
манду ALTER TABLE. Для изме-
нения характеристик не своей
таблицы, Вы должны либо иметь
для нее привилегию ALTER, ли-
бо иметь привилегию DBA.
ADD/MODIFY добавляет или модифицирует
column_element определение столбца, ограни-
чение столбца или его умолча-
ние. Синтаксис column_element
приводится ниже в этой главе.
ADD Добавляет ограничение для
table_constraint таблицы. См. ниже в этой гла-
ве описание "Constraint"
DROP constraint отменяет указанное ограниче-
ние для столбца или таблицы.
PCTFREE integer (Смотрите описание этих па-
PCTUSED integer раметров ниже в операторе
-- 98 --
INITRANS integer CREATE TABLE)
MAXTRANS integer
STORAGE storage (См. ниже фразу Storage).
BACKUP модифицирует словарь данных,
отмечая что таблица была ско-
пирована на момент выдачи ко-
манды ALTER TABLE.
Справочное руководство по языку SQL 5-18
Замечания по Если Вы добавляете к таблице столбец с по-
использованию мощью фразы ADD, его начальное значение для
каждой строки - NULL. Добавлять столбец NOT
NULL можно только в пустую (не содержащую
строк) таблицу.
Фраза MODIFY используется для изменения сле-
дующих атрибутов столбца:
* размеров
* типа данных
* NOT NULL
Изменять тип данных и уменьшать размер столб-
ца можно лишь для содержащих NULL во всех
строках. Изменить тип на NUT NULL можно толь-
ко если все строки содержат значение не null.
Если Вы меняете размер столбца, имевшего ат-
рибут NOT NULL и не указываете "NOT NULL",
столбец все равно сохраняет этот атрибут.
Замечание. Обзор, определенный запросом по
всем столбцам таблицы (SELECT * FROM ...), не
будет больше правильно работать, если Вы до-
бавили к соответствующей таблице новые столб-
цы. Это можно обойти удалением и повторным
созданием обзора.
Примеры Чтобы добавить к таблице EMP числовой столбец
THRIFTPLAN с максимальным размером в семь
цифр и двумя позициями после точки, а также
однобайтового столбца LOANCODE, введите:
ALTER TABLE EMP
ADD (THRIFTPLAN NUMBER(7,2), LOANCODE CHAR(1))
Для увеличения размера THRIFTPLAN до 9 цифр и
отмены ограничения ENAME_CNSTR введите:
ALTER TABLE EMP
MODIFY (THRIFTPLAN NUMBER(9,2))
DROP CONSTRAINT ENAME_CNSTR
Связанные Оператор CREATE TABLE; фраза Constraint.
темы
Справочник по SQL - операторам 5-19
-- 99 --
E ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ F
ALTER TABLESPACE
E F
Назначение Изменить существующее табличное пространство путем:
* добавления или переименования файла(ов) базы данных
* изменения умалчиваемых параметров памяти для таблиц
* перевода его в online или offline
* старта или остановки backup.
Предпосылки Требуется привилегия DBA
Синтаксис ALTER TABLESPACE tablespace
{ADD DATAFILE filespec [,filespec [REUSE] ] ...
|RENAME DATAFILE 'filename' [,'filename'] ...
TO 'filename' [,'filename']...
|DEFAULT STORAGE storage]
|ONLINE
| OFFLINE [ NORMAL | IMMEDIATE ]
| {BEGIN BACKUP | END BACKUP}}
Ключевые слова
и параметры
tablespace имя существующего табличного прост-
ранства
ADD DATAFILE делает доступной табличному прост-
filespec ранству дополнительную память. До-
бавить файл к табличному пространс-
тву можно когда оно находится в
состоянии online или offline.
Filespec спецификация базы данных в
форме:
'filename' [SIZE integer [K|M]][REUSE]
integer указывает SIZE в байтах.
Если integer опущено, предполагает-
ся размер файла журнала в 500К. Ес-
ли далее идет "К", integer умножа-
ется на 1024, если "М" - на
1048576. Если SIZE указан, а REUSE
- опущен, будет создаваться файл
специфицированного размера (до это-
го он не должен существовать). Если
указаны параметра, файл создается,
если его нет, а если есть - прове-
ряется его размер. Если REUSE опу-
щено или не указаны оба аргумента,
файл должен существовать и оста-
ваться такого же размера.
RENAME переименовывает один или несколько
DATAFILE filename файлов, связанных с табличным
TO filename пространством. Файл операционной
системы не переименовывается. Во
время этой операции табличное
пространство должно находиться в
-- 100 --
offline.
DEFAULT специфицирует новые умалчиваемые па-
STORAGE storage раметры памяти для будущих объектов,
создаваемых в табличном пространстве
См. описание синтаксиса фразы
STORAGE
Справочное руководство по языку SQL 5-20
ONLINE указывает, что табличное пространс-
тво должно быть возвращено в состоя-
ние online.
OFFLINE указывает, что табличное пространс-
тво должно быть выведено в offline
либо немедленно (IMMEDIATE), либо
после того, как текущие пользователи
больше к нему не обращаются
(NORMAL).
BEGIN BACKUP специфицирует, что файлы базы, сос-
тавляющие это пространство, будут
скопированы системной процедурой
backup. Этот оператор не влияет на
доступ к базе данных; пользователи
могут продолжать к ней обращаться.
Этот оператор для работы потребуются
также управляющий файл и файл журна-
ла.
END BACKUP указывает на завершение процедуры
системного копирования.
Замечания по Для переименования файла(ов) необходимо выполнить
использова- следующие шаги:
нию
1. Перевести табличное пространство в offline.
2. Переименовать файлы на уровне операционной системы
3. Переименовать файлы с помощью оператора ALTER
TABLESPACE.
4. Вернуть табличное пространство в online.
Примеры Чтобы сигнализировать базе данных о начале операции
копирования, введите:
ALTER TABLESPACE ACCOUNTING BEGIN BACKUP
Чтобы сигнализировать, что backup завершился, введите:
ALTER TABLESPACE ACCOUNTING END BACKUP
Заметьте, что выполнять backup можно и при активном
табличном пространстве. Просто offline backup не
требует от Вас архивирования файлов журнала повтор-
ного выполнения.
Связанные Операторы CREATE TABLESPACE, CREATE DATABASE, DROP
темы TABLESPACE; фраза STORAGE.
Справочник по SQL - операторам 5-21
-- 101 --
E ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ F
E ALTER USER F
Назначение изменять следующие характеристики существующих поль-
зователей базы данных:
* пароль
* умалчиваемое табличное пространство для создания
объектов
* умалчиваемое временное табличное пространство для
временных сегментов, создаваемых в интересах поль-
зователя.
Предпосылки Требуется привилегия DBA
Синтаксис ALTER USER username [IDENTIFIED BY password]
[DEFAULT TABLESPACE tablespace]
[TEMPORARY TABLESPACE tablespace]
Ключевые слова
и параметры
username имя существующего в настоящий момент
пользователя базы данных.
password новый пароль для данного пользователя
DEFAULT специфицирует умалчиваемое табличное
TABLESPACE пространство для создания объектов.
TEMPORARY специфицирует умалчиваемое табличное
TABLESPACE пространство для создания временных
сегментов.
Замечания по Пароль пользователя может быть изменен также и с по-
использова- мощью оператора GRANT. Умалчиваемое временное таб-
нию личное пространство для пользователя может быть ус-
тановлено также при назначении пользователю
привилегии RESOURCE для табличного пространства (и
если это первое табличное пространство в котором
предоставляется такая привилегия). Умалчиваемое вре-
менное табличное пространство устанавливается также
при предоставлении пользователю первого табличного
пространства.
Пример Для изменения у пользователя SCOTT пароля на LION и
назначения в качестве умалчиваемого - табличное
пространство TSTEST, введите:
ALTER USER SCOTT
IDENTIFIED BY LION
DEFAULT TABLESPACE TSTEST
Связанные Операторы CREATE TABLESPACE и GRANT.
темы
Справочное руководство по языку SQL 5-22
-- 102 --
E ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ F
E
AUDIT (Форма I) F
Назначение Выбор опций регистрации доступа к базе данных.
Предпосылки Требуется привилегия DBA
Синтаксис AUDIT {system_option [,system_option]... | ALL]
WHENEVER [NOT] SUCCSESSFUL]
Ключевые слова system_option одна из опций: DBA, CONNECT, NOT
и параметры EXISTS или RESOURCE.
ALL эквивалентен списку всех перечис-
ленных опций. По умолчанию опера-
торы регистрируются независимо от
того, успешно или нет они заверши-
лись.
WHENEVER указывает, что SQL - операторы бу-
SUCCSESSFUL дут регистрироваться только при их
успешном завершении.
WHENEVER NOT указывает, что SQL - операторы бу-
SUCCSESSFUL дут регистрироваться только при их
аварийном завершении.
Замечания по Эта форма регистрации доступа дает возможность DBA
использова- отслеживать следующие действия:
нию
* подключение и отключение пользователей к базе дан-
ных (опция CONNECT)
* операторы, требующие привилегии RESOURCE, например
такие, которые создают объекты базы данных
* операторы, требующие привилегии DBA (опция SBA)
* операторы, завершившиеся с ошибкой ORACLE, так как
указанные объекты базы данных не существуют (опция
NOT EXIST).
Регистрация доступа на уровне системы включается с
помощью параметра AUDIT_TRAIL файла INIT.ORA. Неза-
висимо от того, включена регистрация или нет, SQL -
оператор AUDIT будет выполняться правильно. Если ре-
гистрация задействована, в журнал будут заноситься
записи, в противном случае - нет.
Все формы регистрации помещают результаты в таблицы
словаря данных. В результате этого Вы можете легко
генерировать отчеты на основании этих данных. Если
таблицы регистрации словаря данных разрастаются, Вы
можете архивировать старые записи регистрации досту-
па и удалить их из таблиц. Удалять таблицы словаря
данных Вы не должны.
Справочник по SQL - операторам 5-23
-- 103 --
Заметьте, что для операторов DDL и DML термин "за-
вершение" означает завершение "фазы разбора" (ана-
лиз, просмотр словаря, проверка защиты) безотноси-
тельно их выполнения (execution). Обратите внимание,
что операция rollback не удаляет строки из журнала
регистрации доступа.
Если не определено ни WHENEVER SUCCSESSFUL, ни
WHENEVER NOT SUCCSESSFUL, SQL - операторы регистри-
руются независимо от их завершения.
Примеры Для регистрации успешных запросов ресурсов введите:
AUDIT RESOURCE WHENEVER SUCCSESSFUL
Для регистрации безуспешных попыток доступа к базе
данных введите:
AUDIT CONNECT WHENEVER NOT SUCCSESSFUL
Связанные Операторы AUDIT Формы II и NOAUDIT.
темы
Справочное руководство по языку SQL 5-24
-- 104 --
E ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ F
E AUDIT (Форма II) F
Назначение Включать регистрацию доступа к таким объектам базы
данных, как таблицы и обзоры.
Предпосылки Для регистрации объектов Вы должны быть либо их вла-
дельцем, либо иметь привилегии DBA. Опция DEFAULT
требует привилегий DBA.
Синтаксис AUDIT {table_option [,table_option]... | ALL}
ON { [user.]table | DEFAULT}
[BY {SESSION | ACCESS}]
------
[WHENEVER [NOT] SUCCSESSFUL]
Ключевые слова
и параметры
table_option Для таблиц приемлемы следующие опции
AUDIT,COMMENT,DELETE,GRANT,INDEX,
INSERT,LOCK,RENAME,SELECT,UPDATE.
Для обзоров приемлемы следующие опции
AUDIT,COMMENT,INSERT,DELETE,GRANT,
LOCK,RENAME,SELECT,UPDATE.
Для последовательностей приемлемы
опции ALTER,AUDIT,GRANT,SELECT.
Для синонимов приемлемы те же оп-
ции, что и для таблиц (так как все
действия реально производятся с таб-
лицами).
ALL может применяться для обозначения
всех приемлемых опций.
username имя владельца таблицы
table имя таблицы, обзора , последова-
тельности или синоним, означающий
обзор или таблицу.
DEFAULT специфицирует, что созданные впо-
следствии таблицы будут регистриро-
ваться, как указано в table_option
(устанавливает общесистемные опции
регистрации доступа).
BY SESSION указывает, что за сеанс будет соз-
дано только по одной записи для
каждого типа регистрируемого доступа
BY ACCESS запись будет создаваться для каждой
попытки доступа каждого типа.
Справочник по SQL - операторам 5-25
-- 105 --
Замечания по Фраза BY определяет степень детализации регистраци-
использова- онного контроля доступа, указывая как часто будут
нию записываться новые элементы в AUDIT_TRAIL. BY
SESSION говорит о том, что определенный тип доступа
применялся к объекту базы данных. BY ACCESS опреде-
ляет, что регистрация будет выполняться так часто,
как часто осуществляется тот или иной вид доступа.
Некоторые события случаются гораздо более часто, чем
другие (например - обычно DML - операторы выполняют-
ся более часто, нежели GRANT). Чем более детальная
регистрация, тем большее количество записей генери-
руется, так что Вы должны проанализировать, какие
операторы надо регистрировать.
В режиме BY SESSION для каждой таблицы генерируется
не более одной записи для всего сеанса пользователя.
Выбранные SQL - операторы записываются не добавлени-
ем, а изменением записей в таблице AUDIT_TRAIL. Ко-
личество таких обновлений записи зависит от числа
успешных или неудачных попыток выполнения операторов
определенного типа. Отсутствие фразы BY ... означает
по умолчанию BY SESSION.
В режиме BY ACCESS регистрируемые SQL - операторы
отмечаются в AUDIT_TRAIL добавлением (вставкой
строк). Для операций DML строки добавляются или об-
новляются после завершения "фазы разбора" оператора.
Пример Для регистрации всех сеансов, в которых были безус-
пешные попытки доступа к таблице EMP, введите:
AUDIT ALL ON EMP WHENEVER NOT SUCCSESSFUL
Для регистрации каждой попытки вставки строк и их
модификации в той же таблице, введите:
AUDIT INSERT, UPDATE ON EMP BY ACCESS
Связанные Операторы AUDIT Формы I и NOAUDIT.
темы
-- 106 --
Справочное руководство по языку SQL 5-26
E ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ F
E CLOSE cursor (Встроенный SQL) F
Назначение Освобождает ресурсы, распределенные оператором
OPEN cursor.
Предпосылки Должен именовать ранее открытый курсор.
Синтаксис EXEC SQL CLOSE cursor_name
Ключевые cursor_name ранее открытый курсор.
слова и
параметры
Замечания Попытка закрыть не открытый курсор приведет к
по исполь- ошибке. Нет необходимости закрывать курсор, чтобы
зованию вновь открыть его. Из закрытого курсора строки не
могут быть выбраны.
Закрытие курсора освобождает ранее открытый неяв-
ный курсор; освобождение, однако, не выполняется,
пока память, связанная с курсором, нужна другому
неявному курсору. Такое освобождение автоматичес-
ки выполняет ORACLE.
Опции прекомпилятора HOLD_CURSOR и RELEASE_CURSOR
влияют на действие оператора CLOSE cursor. Для
информации об этих опциях обратитесь к "Руководс-
тву программиста по прекомпиляторам ORACLE".
Пример Следующий пример показывает типичную последова-
тельность использования курсоров. Вы должны
описать курсор, открыть его, выбрать строки и,
наконец, закрыть его.
EXEC SQL DECLARE c CURSOR
FOR SELECT ename, empno, job, sal
FROM emp
WHERE deptno=:deptno;
EXEC SQL OPEN c;
example: loop
EXEC SQL FETCH c INTO :ename, :empno, :job,
:sal:sal_ind;
if sqlca.sqlcode = oracle.error.not_found then
exit sample;
end if;
end loop example;
EXEC SQL CLOSE c;
-- 107 --
Связанные Операторы PREPARE, DECLARE CURSOR, OPEN cursor.
темы
Справочник по SQL - операторам 5-27
E ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ F
E Ограничение для столбца F
См. ниже раздел "Фраза CONSTRAINT".
E ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ F
E Элемент описания для столбца F
Назначение Определение столбца и связанных с ним ограничений.
Предпосылки Нет.
Синтаксис column datatype [DEFAULT expr] [column constraint]
Ключевые column имя вводимого столбца, подчиняю-
слова и щееся соглашениям по именованию
параметры объектов базы данных.
datatype правильный тип данных (определя-
ются в Главе 3 - "Элементы языка
SQL" данного руководства.
DEFAULT expr Необязательная фраза DEFAULT оп-
ределяет выражение, назначаемое
столбцу, если оно явно не указы-
вается при добавлении строки в
таблицу. Действительно любое вы-
ражение, исключая ссылающиеся на
столбец, LEVEL, ROWNUM. Тип дан-
ных выражения должен соответс-
твовать типу столбца. Синтаксис
expr определяется в Главе 4 -
"Операции и функции" данного ру-
ководства.
column constraint (См. ниже раздел "Фраза
CONSTRAINT").
Замечания ORACLE Version 6.0 поддерживает синтаксис фразы
по исполь- DEFAULT; семантическая поддержка будет обеспечена
зованию в будущих версиях.
Элементы описания столбца используются в операто-
рах CREATE TABLE и ALTER TABLE для определения
столбцов таблиц.
Примеры Для определения столбца EMPNO с типом NUMBER,
размером 5 цифр и NOT NULL, введите:
-- 108 --
CREATE TABLE EMP (EMPNO NUMBER(5) NOT NULL, ...)
Чтобы создать столбец DEPTNO с типом NUMBER, раз-
мером 5 цифр и подразумеваемым значением 100,
введите:
CREATE TABLE EMP (..., DEPTNO NUMBER(5) DEFAULT 100)
Связанные Фраза CONSTRAINT; оператор CREATE TABLE.
темы
-- 109 --
Справочное руководство по языку SQL 5-28
E ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ F
E COMMENT F
Назначение Записывать в словарь данных комментарии, относя-
щиеся к таблице.
Предпосылки Для записи комментария о таблице или столбце Вы
должны быть владельцем таблицы или иметь привиле-
гию DBA или иметь привилегию ALTER для данной
таблицы.
Синтаксис COMMENT ON { TABLE [user.]table
| COLUMN [user.]table.column }
IS 'text'
Ключевые user владелец таблицы.
слова и
параметры TABLE table специфицирует имя комментируемой
таблицы или обзора.
COLUMN column специфицирует имя комментируемо-
го столбца.
text заключенный в одиночные кавычки
текст длиной до 255 символов.
См. описание text в Главе 3 -
"Элементы языка SQL" данного ру-
ководства.
Замечания Удалить комментарий из базы данных можно просто
по исполь- задав в качестве комментария пустую строку ''.
зованию Чтобы посмотреть комментарий, запросите его в од-
ном из обзоров словаря данных: ALL_COL_COMMENTS,
ALL_TAB_COMMENTS, USER_COL_COMMENTS или USER_TAB_
COMMENTS.
Примеры Для занесения комментария для столбца NOTES таб-
лицы SHIPPING, можно ввести:
COMMENT ON COLUMN SHIPPING.NOTES
IS 'Special packing or shipping instructions'
Для удаления этого комментария необходимо ввести:
COMMENT ON COLUMN SHIPPING.NOTES IS ''
Связанные /**/(Комментарий SQL).
темы
Справочник по SQL - операторам 5-29
-- 110 --
E ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ F
E COMMIT F
Назначение Оператор COMMIT применяется для того, чтобы:
* сделать "постоянными" все изменения, сделан-
ные в текущей транзакции (реально данные могут
быть изменены несколько позже)
* очистить все точки сохранения данной транзак-
ции
* завершить транзакцию
* освободить все блокировки данной транзакции
Предпосылки Нет.
Синтаксис COMMIT [WORK]
Ключевые WORK необязателен и обеспечивает ANSI
слова и - совместимость. Операторы COMMIT
параметры и COMMIT WORK - идентичны.
Замечания Рекомендуется явно завершать транзакции в прик-
по исполь- ладных программах (включая и последнюю транзакцию
зованию перед отсоединением от ORACLE) используя команды
COMMIT WORK (или ROLLBACK WORK). Если Вы явно не
записали транзакцию, а прикладная программа за-
вершилась аварийно, последняя не записанная тран-
закция будет откачена.
Нормальный выход из большинства утилит и инстру-
ментальных средств ORACLE будет записывать
текущую транзакцию. Нормальный выход из программы
прекомпилятора ORACLE приводит к откату текущей
транзакции. См. ниже раздел об операции COMMIT во
встроенном SQL.
Транзакция (или логическая единица работы) - это
последовательность SQL - операторов, которую
ORACLE трактует как единый элемент. Транзакция
начинается с первого выполнимого SQL - оператора
после COMMIT, ROLLBACK или присоединения к базе
данных. Транзакция завершается по командам
COMMIT, ROLLBACK или при отсоединении от ORACLE.
Заметьте, что система ORACLE выдает неявный
COMMIT до и после выполнения любого DDL - опера-
тора. За полным описанием транзакций и обработки
транзакций обратитесь к Главе 11 - "Управление
транзакциями" документа "ORACLE RDBMS Руководство
администратора базы данных".
-- 111 --
Операторы COMMIT и ROLLBACK завершают также и
транзакцию типа "READ ONLY", начинающуюся операто-
ром SET TRANSACTION.
Справочное руководство по языку SQL 5-30
Пример Для добавления строки к таблице DEPT и записи из-
менения введите следующие команды:
INSERT INTO DEPT VALUES ('50','MARKETING','TAMPA')
COMMIT WORK
Связанные Операторы ROLLBACK, SAVEPOINT, SET TRANSACTION.
темы
-- 112 --
Справочник по SQL - операторам 5-31
E ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ F
E COMMIT (Встроенный SQL) F
Назначение Сделать постоянными все изменения, выполненные в
данной транзакции. Опция RELEASE используется для
освобождения всех ресурсов и отсоединения от базы
данных.
Предпосылки Нет.
Синтаксис EXEC SQL [AT dbname] COMMIT [WORK] [RELEASE]
Ключевые AT dbname необязательная фраза, указываю-
слова и щая имя базы данных, для которой
параметры выдан COMMIT. За дополнительной
информацией о фразе AT обрати-
тесь к описанию оператора
DECLARE DATABASE.
RELEASE необязательный параметр, отсое-
диняющий Вас от базы данных.
Замечания Всегда завершайте явно последнюю единицу работы с
по исполь- помощью операторов COMMIT или ROLLBACK с опцией
зованию RELEASE. Если Вы не выполните COMMIT и RELEASE,
блокировки, запрошенные в процессе работы Вашей
программы, будут держать ресурсы, пока ORACLE
RDBMS не поймет, что процесс больше не активен.
Это может привести к тому, что остальные пользо-
ватели, нуждающиеся в тех же ресурсах, будут ожи-
дать или получать ошибки при попытке обращения.
Если команда COMMIT выдана без опции RELEASE, Ва-
ша текущая транзакция будет записана без
последующего отсоединения от базы данных.
ORACLE автоматически откатывает изменения, если
программа завершается аварийно.
Оператор COMMIT WORK не влияет на содержимое host
- переменных и на процесс дальнейшей работы прог-
раммы.
Пример EXEC SQL COMMIT RELEASE
Связанные Операторы ROLLBACK, SAVEPOINT, SET TRANSACTION.
темы
Справочное руководство по языку SQL 5-32
-- 113 --
E ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ F
E CONNECT (Встроенный SQL) F
Назначение Обеспечивает прямое подключение к ORACLE RDBMS.
Программа должна это выполнить до того, как попы-
тается обратиться к данным. CONNECT используется
для подсоединения пользователя к любой базе данных
ORACLE.
Предпосылки Для специфицируемой базы данных должна быть при-
вилегия CONNECT.
Синтаксис EXEC SQL CONNECT :user_password
[AT dbname]
[USING :dbstring]
или
EXEC SQL CONNECT :user IDENTIFIED BY :password
[AT dbname]
[USING :dbstring]
Ключевые :user_password одна host - переменная, содержа-
слова и щая имя пользователя и пароль,
параметры разделенные слешем "/".
Для автоматической регистрации
установите значение этой пере-
менной в "/". Это говорит
ORACLE, что для регистрации не-
обходимо использовать имя поль-
зователя из операционной системы.
:user IDENTIFIED позволяет передать имя пользова-
By :password теля и пароль как два отдельных
элемента.
AT dbname необязательная фраза, определяю-
щая неумалчиваемую базу данных.
Это имя должно быть предвари-
тельно определено в операторе
DECLARE DATABASE.
USING определяет строку спецификации
connect_string для удаленной базы данных при
работе через SQL*Net.
Замечания Если отсутствует фраза AT, в качестве подразуме-
по исполь- ваемой используется база данных, указанная во
зованию фразе USING.
В программе может быть выполнено несколько опера-
торов CONNECT, но только одно соединение может
быть выполнено без использования фразы AT для
специфицирования удаленной базы данных.
-- 114 --
Если Вы опустили фразу USING, оператор CONNECT
подключит Вас к подразумеваемой базе данных.
Справочник по SQL - операторам 5-33
-- 115 --
Прямое соединение через SQL*Net
Прямое соединение требует от Вас установления от-
дельных связей с каждым узлом и обращение к дан-
ным любым удобным Вам способом через курсор, отк-
рытый для этой базы данных. При использовании
этого метода Вы присоединяетесь к удаленной базе
данных непосредственно, указывая имя связи, на
которое ссылаетесь в других операторах EXEC SQL.
Следующий пример иллюстрирует такой метод:
:userid = "scott";
:password = "tiger";
:connect_string = "D:HQVMS";
EXEC SQL DECLARE dbname DATABASE;
EXEC SQL CONNECT :userid
IDENTIFIED BY :password
AT dbname
USING :connect_string;
Последующие SQL - операторы, использующие фразу
AT, включающую в себя имя dbname, будут выпол-
няться на базе данных, идентифицирующейся с по-
мощью dbname. (Заметьте, что dbname - это не host
- переменная и ее значение не может быть изменено
в процессе работы; это должен быть правильный SQL
- идентификатор). connect_string содержит строку
SQL*Net, специфицирующую связь с удаленным узлом,
имеющем например, имя - MYNODE и работающую по
протоколу DECnet. (D:MYNODE). Полное описание
синтаксиса connect_string содержится в "Руководс-
тве пользователя SQL*Net" для Вашего протокола
SQL*Net.
Используя этот метод, можно выполнить следующую
последовательность команд:
EXEC SQL AT remote_db SELECT ...;
EXEC SQL AT remote_db INSERT ...;
EXEC SQL AR remote_db DECLARE cursor_name
CURSOR FOR SELECT...;
EXEC SQL OPEN cursor_name...;
EXEC SQL FETCH cursor_name...;
Заметьте, что при открытии курсора и выборке из
него Вы не используете фразу AT. SQL - оператор
будет выполнен на базе данных, на которую ссыла-
ются во фразе AT, связанной с оператором DECLARE
cursor.
При использовании такой техники Вы можете делать
все, к чему имеете привилегии в удаленной базе
данных (включая модификацию данных). Кроме того,
Вы можете поддерживать несколько транзакций, по
одной на каждую базу, с которой вы соединены.
Справочное руководство по языку SQL 5-34
-- 116 --
Пример Приводимый ниже оператор используется в протоколе
DECnet для подключения пользователя через SQL*Net
к удаленной базе данных NYC, ранее определенной с
помощью оператора DECLARE DATABASE:
EXEC SQL CONNECT :username
IDENTIFIED BY :password
AT NYC
USING D:NYC_NODE
Перед запуском этого оператора приложение подклю-
чилось к ORACLE с правильным именем пользователя
и паролем.
Непрямое соединение через SQL*Net
Другой путь обращения к удаленным данным из прог-
рамм прекомпиляторов - положиться на обеспечивае-
мое ORACLE RDBMS средство выполнения распределен-
ных запросов. В этом случае Вы соединены с одной
базой данных (локальной) и она заботится о Вашем
соединении с другой (удаленной) базой данных. Вы
передаете SQL - операторы на обработку в свою ба-
зу данных, а она разбивает запрос на части и вы-
бирает данные из другой базы.
Исчерпывающее обсуждение создания и использование
межбазовых связей производится в описании опера-
тора CREATE DATABASE LINK.
Заметьте, что межбазовая связь не связана с име-
нем базы данных, используемой во фразе "AT" пре-
компилятора. Межбазовая связь применяется внутри
SQL - оператора после имени таблицы. В противопо-
ложность этому, имя базы данных в прекомпиляторе
используется только во фразе "AT" оператора "EXEC
SQL" для идентифицирования, где он должен быть
выполнен.
Заметьте, что в отличие от прямого соединения,
межбазовые связи допускают выполнения только опе-
ратора SELECT...
Связанные Операторы COMMIT RELEASE и DECLARE DATABASE.
темы
-- 117 --
Справочник по SQL - операторам 5-35
E ЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬЬ F
E Фраза CONSTRAINT F
Назначение Ограничивает диапазон подходящих значений для
столбца или группы столбцов. При выполнении опе-
раторов INSERT, UPDATE и DELETE соответствующие
ограничения проверяются. Чтобы оператор выполнил-
ся успешно, ограничение должно выполняться.
Текущая версия ORACLE Version 6.0 поддерживает
синтаксис ограничений и запоминает их определения
в словаре данных. В данной версии ограничения (за
исключением NOT NULL) не проверяются.
Ограничения используются для наложения на столбец
или группу столбцов следующих условий:
* требование, чтобы столбец или группа столбцов
содержал значения NOT NULL
* требование, чтобы столбец или группа столбцов
были уникальны для данной таблицы
* идентификация столбца или группы как основного
ключа (PRIMARY KEY)
* требования наличия значения столбца или группы
в другой таблице (внешний ключ - FOREIGN KEY)
* требование удовлетворения столбца или группы
некоторому выражению (CHECK)
Предпосылки Должен использоваться в column_element или table
_constraint в операторах CREATE TABLE и ALTER
TABLE. Оператор CREATE TABLE требует привилегии
RESOURCE.
Синтаксис [{UNIQUE | PRIMARY KEY} (column [,column]...)
ограниче- [CONSTRAINT constraint] ]
ния для [FOREIGN KEY (column [,column]...)
таблицы REFERENCES [user.]table [(column [,column]...)]
[CONSTRAINT constraint] ]
[CHECK (condition) [CONSTRAINT constraint] ]
Синтаксис Column [NULL] | [NOT NULL [CONSTRAINT constraint] ]
ограниче- [{UNIQUE | PRIMARY KEY} [CONSTRAINT constraint] ]
ния для REFERENCES [user.]table [(column)]
столбца [CONSTRAINT constraint] ]
[CHECK (condition) [CONSTRAINT constraint] ]
Справочное руководство по языку SQL 5-36
-- 118 --
Column специфицируется имя столбца, на
который накладывается ограничение
CONSTRAINT специфицируется имя ограничения.
constraint Эта необязательная фраза приме-
нима ко всем ограничениям.
NULL | указывает, что столбец может или
NOT NULL не может содержать значения NULL.
UNIQUE требует, чтобы столбец был уни-
кальным.
PRIMARY KEY определяет столбец как основной
ключ.
FOREIGN KEY определяет столбец как внешний
(column..) ключ для user.table(column(s)).
REFERENCES По умолчанию columns(s) являются
user.table(column) основным ключом table.
CHECK condition определяет условие, которому
должна удовлетворять строка,
чтобы находиться в таблице. Оп-
ределение синтаксиса condition
находится в Главе 4 - "Операции
и функции" данного руководства.
Существует два типа ограничений: для таблиц и
столбцов (table constraints, column constraints).
Они идентичны, за исключением того, что ограниче-
ние для столбца ссылается на единственный стол-
бец, в то время как ограничение таблицы может
ссылаться на большее число столбцов.
Ограничение может быть специфицировано двумя спо-
собами:
* Определение ограничений для таблицы как часть
глобального определения таблицы:
CREATE TABLE Project_Empoloyee
(PROJECT NUMBER,
EMPLOYEE NUMBER,
PRIMARY KEY (PROJECT,EMPLOYEE) )
* Определение ограничений для столбца локально
для определенного столбца:
CREATE TABLE DEPT
(DEPTNO NUMBER PRIMARY KEY, ...)
Как и другие объекты базы данных, ограничения
сохраняются в словаре данных.
-- 119 --
У Вас есть возможность именования ограничения.
Если Вы не сделали этого, имя ограничению будет
назначено системой в виде SYS_Cn, где n - целое,
делающее это имя уникальным для базы данных. Та-
кие назначенные системой имена переназначаются в
процессе импорта.
Справочник по SQL - операторам 5-37
Ограничения должны использоваться либо в операто-
ре CREATE TABLE, либо - в ALTER TABLE. Они могут
быть удалены или добавлены оператором ALTER
TABLE. Для модификации ограничения его необходимо
удалить и вновь добавить.
NULL Ограничение NULL может применяться только для
столбцов. Это ограничение может иметь значения
NULL либо NOT NULL. Первое означает, что в табли-
це может быть сколько угодно строк, содержащих в
этом столбце значение NULL и наоборот, NOT NULL
означает отсутствие таких строк. При отсутствии
предполагается ограничение NULL, что разрешает
столбцам содержать такие значения.
Пример Для включения в таблицу столбца EMPNO с типом
данных NUMBER, имеющего ограничение NOT NULL (имя
ограничения NN_CNSTRNT), введите:
CREATE TABLE EMP
(EMPNO NUMBER(5) NOT NULL CONSTRAINT NN_CNSTRNT...)
UNIQUE Ограничение QNIQUE:
* требует, чтобы каждая строка имела в этом
столбце различные значения
* требует, чтобы столбец был объявлен NOT NULL
* требует, чтобы столбец не был основным ключом.
Пример Для включения в таблицу столбца ENAME с типом
данных CHAR, имеющего ограничение QNIQUE (имя ог-
раничения UNQ_NAME), введите:
CREATE TABLE EMP ( ...
ENAME CHAR(19) UNIQUE CONSTRAINT UNQ_NAME
... )
Для включения в таблицу EMP столбцов с кодом ра-
йона и телефонного номера, определив им ограниче-
ние UNIQUE (ограничение для таблицы), введите:
ALTER TABLE EMP
ADD (PHONE_AREA_CODE CHAR(3) NOT NULL,
PHONE_NUMBER CHAR(8) NOT NULL,
UNIQUE (PHONE_AREA_CODE,PHONE_NUMBER)
CONSTRAINT PHONE_CNSTR)
Справочное руководство по языку SQL 5-38
-- 120 --
PRIMARY KEY Основной ключ:
* служит для уникального идентифицирования
каждой строки таблицы
* является объединением требования UNIQUE и
требования NOT NULL
* требует, чтобы столбец не имел ограничения
UNIQUE
* может быть указан для таблицы только один
раз, хотя и может состоять из нескольких
столбцов. Если основной ключ содержит толь-
ко один столбец, можно воспользоваться как
ограничением для столбца, так и для табли-
цы. Если - более одного столбца, необходимо
воспользоваться ограничением для таблицы.
Пример Для включения в таблицу EMP столбца EMPNO типа
NUMBER с ограничением PRIMARY KET (имя ограниче-
ния PK_CNSTRNT), введите:
CREATE TABLE EMP
(EMPNO NUMBER(5) PRIMARY KEY CONSTRAINT
PK_CNSTRNT, ...)
Для создания таблицы, связывающей магазины и кон-
тейнеры и определения SHIP_NO и CONTAINER_NO в
качестве основного ключа, введите:
CREATE TABLE SHIP_CONTAINER
(SHIP_NO NUMBER NOT NULL,
CONTAINER_NO NUMBER NOT NULL,
PRIMARY KEY (SHIP_NO, CONTAINER_NO))
FOREIGN KEY Таблица, имеющая ограничение REFERENCES, называ-
ется таблицей внешнего ключа. Таблица, к которой
обращаются через ограничение REFERENCES, называ-
ется таблицей основного ключа. В дальнейшем об-
суждении EMP - таблица внешнего ключа, а DEPT -
таблица основного ключа.
Ограничение FOREIGN KEY/REFERENCES:
* реализует концепцию "внешнего ключа", как
описано в Главе 1 "Реляционная модель"
* будет отвергать попытки выполнения команд
INSERT и UPDATE со значениями, не существую-
щими в таблице основного ключа
* будет отвергать попытки выполнения команды
DELETE, если последняя не согласуется с огра-
ничением REFERENCES. Например - отдел не мо-
жет быть удален из таблицы DEPT, если в таб-
лице EMP существуют служащие, работающие в
данном отделе.
Справочник по SQL - операторам 5-39
-- 121 --
* должно ссылаться на столбец (или группу
столбцов) PRIMARY KEY или UNIQUE в таблице
основного ключа
* должно ссылаться на столбец PRIMARY KEY в
таблице основного ключа
* должно ссылаться именно на таблицу, а не на
обзор или кластер
* требует, чтобы Вы были владельцем или имели
привилегию REFERENCE для таблицы основного
ключа, или имели привилегию REFERENCE для
столбцов, на которые ссылаетесь в таблице ос-
новного ключа.
* не существует ограничений на количество ссы-
лок к столбцу или таблице. Следовательно, на
столбец можно ссылаться несколько раз
* требует, чтобы типы данных столбцов внешнего
ключа и тех, на которые он ссылается, были
одинаковыми (совпадение имен не обязательно)
* может ссылаться на ту же самую таблицу (на
саму себя)
* не должно ссылаться на один столбец несколько
раз (хотя к одному столбцу можно ссылаться с
помощью нескольких ограничений внешнего клю-
ча).
При использовании в ограничении для таблицы син-
таксис FOREIGN KEY (column [,column...]) должен
предшествовать ключевому слову REFERENCES.
Если для ограничения FOREIGN KEY нет соответству-
ющего списка REFERENCES, то столбец предполагает-
ся PRIMARY KEY в таблице REFERENCES.
Информация об ограничениях таблиц и столбцов за-
поминается в таблицах словаря данных
CONSTRAINT_DEFS и CONSTRAINT_COLUMNS.
Справочное руководство по языку SQL 5-40
-- 122 --
Пример Если столбец DEPTNO рассматривается в таблице EMP
в качестве внешнего ключа, служащий не может быть
добавлен в таблицу EMP, пока его DEPTNO содержит
значение NULL (предполагаем, что DEPTNO разрешает
наличие значений NULL) или оно не совпадает с од-
ним из значений DEPTNO в таблице DEPT. Следующий
пример иллюстрирует часть оператора CREATE TABLE,
необходимую для создания внешнего ключа DEPTNO,
ссылающегося на столбец DEPTNO в таблице DEPT:
CREATE TABLE EMP
( ...,
deptno NUMBER REFERENCES scott.dept ( deptno )
CONSTRAINT deptno_fk,
... )
Для добавления к таблице ORDERS столбцов SHIP_NO
и CONTEINER_NO и определения ссылки на таблицу
SHIP_CONTAINER пользователя BLAKE используя син-
таксис ограничений на таблицу, необходимо ввести:
ALTER TABLE ORDERS
ADD (SHIP_NO NUMBER NOT NULL,
CONTAINER_NO NUMBER NOT NULL,
FOREIGN KEY (SHIP_NO, CONTAINER_NO)
REFERENCES BLAKE.SHIP_CONTAINER
CONSTRAINT ORDERS_FK)
CHECK Синтаксис ограничения CHECK идентичен для столбца
и таблицы. Ограничение CHECK может ссылаться
только на столбцы той же таблицы. В ограничении
для столбца нельзя ссылаться на другой столбец за
исключением самого себя; в ограничении для табли-
цы можно сослаться на несколько столбцов.
Пример CREATE TABLE dept
(deptno NUMBER CHECK (deptno between 10 and 99),
dname CHAR(9) CHECK (dname = upper(dname)),
loc CHAR(10) CHECK (loc in ('DALLAS','BOSTON',
'NEW YORK')))
Первая фраза CHECK страхует от ввода номера отде-
ла меньше 10 и свыше 99; вторая проверяет, чтобы
все названия отделов были введены символами верхне-
го регистра; третья проверяет, чтобы названия го-
родов, в которых располагаются отделы были:
DALLAS, BOSTON и NEW YORK.
Для добавления ограничения, гарантирующего, что
оклад и комиссионные в сумме не могут превышать
5000 долларов, следует ввести такой оператор:
ALTER TABLE EMP
ADD (CHECK (SAL+COMM 5000))
Справочник по SQL - операторам 5-41
-- 123 --
Пример дополнительных ограничений для таблицы
В следующем операторе CREATE TABLE вводится одно
ограничение PRIMARY KEY, два ограничения FOREIGN
KEY и два ограничения CHECK (все на уровне табли-
цы):
CREATE TABLE order_detail
(order_id NUMBER,
part_number NUMBER,
... ,
PRIMARY KEY(order_id, part_number) CONSTRAINT
oid_pno_pk,
FOREIGN KEY(order_id)
REFERENCES scott.order(order_id) CONSTRAINT
oid_fk,
FOREIGN KEY(part_number)
REFERENCES scott.part(part_number) CONSTRAINT
pno_fk,
CHECK (order_id > 0) CONSTRAINT oid_ck,
CHECK (part_number > 0) CONSTRAINT pno_ck
... )
1. Основной ключ таблицы ORDER_DETAIL комбиниру-
ется из столбцов ORDER_ID и PART_NUMBER.
2. ORDER_ID - это внешний ключ из таблицы ORDER,
а PART_NUMBER - из таблицы PART.
3. Ни ORDER_ID, ни PART_NUMBER в таблице
ORDER_DETAIL не могут иметь значения NULL, так
как входят в основной ключ. ( Это неявно обес-
печивается ограничением PRIMARY KEY и следова-
тельно, нет необходимости указывать это от-
дельно при описании столбцов).
4. Так как оба столбца являются внешними ключами,
ни одна строка не может быть добавлена к таб-
лице, пока в таблице ORDER не будет существо-
вать соответствующего значения ORDER_ID, а в
таблице PATR - PART_NUMBER.
5. Фраза CHECK гарантирует, что и ORDER_ID, и
PART_NUMBER будут больше нуля.
Заметьте, что написание FOREIGN KEY(column1,column2)
означает, что column1 и column2 комбинируются в
одном внешнем ключе. Синтаксис FOREIGN
KEY(column1) ...,FOREIGN KEY(column2) ... создает
два ограничения, по одному на каждый внешний ключ.
Связанные Оператор CREATE TABLE и элемент описания для стол-
темы бца.
|