Автор работы: Пользователь скрыл имя, 29 Января 2013 в 16:25, курсовая работа
В данной работе рассмотрим такие объекты Базы данных, как хранимые процедуры. Их виды, свойства, способы реализации, назначения и преимущества. И остановим свое внимание на типе хранимых процедур Триггер. Рассмотрим особенности строения и преимущества данного вида хранимых процедур.
Чтобы создать триггер в схеме другого пользователя, необходимо иметь системную привилегию CREATE ANY TRIGGER. Эта привилегия позволять создать триггер в любой схеме и ассоциировать его с таблицей любого пользователя.
Привилегии для объектов схем, адресуемых в теле триггера
Как и для хранимых процедур, владелец триггера должен иметь привилегии для объектов, адресуемых в теле триггера, причем эти привилегии должны быть получены им явно (не через роли). Предложения в теле триггера оперируют под доменом защиты владельца триггера, а не того пользователя, который выдает предложение, возбуждающее триггер.
Изменение триггеров
Нельзя явно изменить триггер; его необходимо заменить новым определением триггера. Если вы используете текстовый редактор для создания ваших триггеров, вы можете просто отредактировать соответствующий текстовый файл и выполнить предложение CREATE TRIGGER, чтобы определить новую версию кода.
Заменяя триггер, вы должны включить в предложение CREATE TRIGGER опцию OR REPLACE. Опция OR REPLACE позволяет заменить существующий триггер новой версией, не затрагивая никаких грантов, которые были выданы для первоначальной версии этого триггера.
Альтернативно, триггер можно удалить и создать заново. Однако все гранты, которые были выданы для удаляемого триггера, также удаляются, и должны быть выданы заново после создания новой версии триггера.
Удаление триггеров
Для удаления триггера из базы данных используйте команду DROP TRIGGER. Например, чтобы удалить триггер с именем REORDER, следующее предложение:
DROP TRIGGER reorder;
Привилегии, требуемые для удаления триггеров
Чтобы удалить триггер, вы должны иметь его в своей схеме, либо системную привилегию DROP ANY TRIGGER.
Включение и выключение триггеров
Триггер может находиться в одном из двух различных режимов: включен, Включенный триггер выполняет свое тело, если выдано предложение триггера, и ограничение триггера (если есть) вычисляется как TRUE; выключен, Выключенный триггер не выполняет свое тело, даже если выдано предложение триггера, и ограничение триггера (если есть) вычисляется как TRUE.
Выключение триггеров
Своевременно возможно выключить триггер, если имеет место одно из следующих условий:
По умолчанию, триггер включается в момент его создания. Чтобы отключить триггер, используйте команду ALTER TRIGGER с опцией DISABLE. Например, следующее предложение отключает триггер
REORDER по таблице INVENTORY:
ALTER TRIGGER reorder DISABLE;
Возможно одновременно отключить все триггеры, ассоциированные с таблицей, с помощью команды ALTER TABLE с опциями DISABLE и ALL TRIGGERS. Например, следующее предложение отключает все, определенные для таблицы INVENTORY:
ALTER TABLE inventory
DISABLE ALL TRIGGERS;
Включение триггеров
По умолчанию, триггер автоматически включается в момент его создания; однако позже он может быть выключен. Закончив задачу, для которой потребовалось выключать триггер, вы можете снова включить его.
Чтобы включить триггер, используется команда ALTER TRIGGER с опцией ENABLE. Например, следующее предложение включает триггер
REORDER по таблице INVENTORY:
ALTER TRIGGER reorder ENABLE;
Возможно одновременно включить все триггеры, ассоциированные с таблицей, с помощью команды ALTER TABLE с опциями ENABLE и ALL TRIGGERS. Например, следующее предложение включает все триггеры, определенные для таблицы INVENTORY:
ALTER TABLE inventory
ENABLE ALL TRIGGERS;
Привилегии, требуемые для включения и выключения триггеров
Для включения и выключения триггеров с помощью команды ALTER TABLE, вы должны либо владеть таблицей, либо иметь объектную привилегию ALTER TABLE для таблицы или системную привилегию ALTER ANY TABLE. Для включения или выключения индивидуального триггера с помощью команды ALTER TRIGGER, вы должны либо владеть , либо иметь системную привилегию ALTER ANY TRIGGER.
Вывод информации о триггерах
Следующие обзоры словаря данных раскрывают информацию отриггерах:
* USER_TRIGGERS
* ALL_TRIGGERS
* DBA_TRIGGERS
Например, предположим, что для создания триггера REORDER было использовано следующее предложение:
CREATE TRIGGER reorder
AFTER UPDATE OF parts_on_hand ON inventory
FOR EACH ROW
WHEN (new.parts_on_hand < new.reorder_point)
DECLARE
x NUMBER;
BEGIN
SELECT COUNT(*) INTO x
FROM pending_orders
WHERE part_no = :new.part_no;
IF x = 0 THEN
INSERT INTO pending_orders
VALUES (:new.part_no, :new.reorder_quantity, sysdate);
END IF;
END;
Следующие два запроса возвращают информацию о триггере REORDER:
SELECT type, triggering_statement, table_name
FROM user_triggers
WHERE name = 'REORDER';
TYPE TRIGGERING_STATEMENT TABLE_NAME
---------------- -------------------------- ------------
AFTER EACH ROW UPDATE INVENTORY
SELECT trigger_body
FROM user_triggers
WHERE name = 'REORDER';
TRIGGER_BODY
------------------------------
DECLARE
x NUMBER;
BEGIN
SELECT COUNT(*) INTO x
FROM pending_orders
WHERE part_no = :new.part_no;
IF x = 0 THEN
INSERT INTO pending_orders
VALUES (:new.part_no, :new.reorder_quantity, sysdate);
END IF;
END;
Способы использования триггеров
Триггеры возможно использовать разнообразными способами, чтобы привязать к своим нуждам управление данными в базе данных ORACLE. Например, триггеры обычно используются для:
Список использованной литературы
webmaster@compress.ru
Информация о работе Особенности разработки триггеров и хранимых процедур в СУБД