Особенности разработки триггеров и хранимых процедур в СУБД

Автор работы: Пользователь скрыл имя, 29 Января 2013 в 16:25, курсовая работа

Описание

В данной работе рассмотрим такие объекты Базы данных, как хранимые процедуры. Их виды, свойства, способы реализации, назначения и преимущества. И остановим свое внимание на типе хранимых процедур Триггер. Рассмотрим особенности строения и преимущества данного вида хранимых процедур.

Работа состоит из  1 файл

курсовая.docx

— 97.34 Кб (Скачать документ)

Чтобы создать триггер в схеме другого пользователя, необходимо иметь системную привилегию 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. Например, триггеры обычно используются для:

  • изощренного аудитинга
  • предотвращения незаконных транзакций
  • обеспечения ссылочной целостности между узлами в распределенной базе данных
  • реализации сложных организационных правил
  • ввода в действие комплексных правил защиты
  • прозрачной регистрации событий
  • автоматической генерации значений вычисляемых столбцов
  • поддержания синхронных дублирований таблиц

 

Список использованной литературы

 

  1. С.Д. Кузнецов, информационно-аналитические материалы Центра Информационных Технологий пользованием интерфейса ядра СУБД.
  2. Грубер М. SQL. - М.: Лори, 2003.
  3. Т.Каннолли, К.Бегг, А. Страчан -Базы данных: проектирование, реализация и сопровождение.Теория и практика
  4. Пахомов Б.И. Interbase b C++Builder на примерах./Б.И.Пахомов. – СПб.; БХВ- Петербург, 2006
  5. КомпьютерПресс 12'2000. Copyright © КомпьютерПресс 2008

webmaster@compress.ru

  1. 6J/Foundation Developer’s Guide  (англ.). IBM. — Раздел документации Informix по разработке хранимых процедур на языке Java. Архивировано из первоисточника 10 февраля 2012.
  2. Проектирование и реализация баз данных Microsoft SQL Server. — М.—СПб.: Русская редакция, Питер, 2005. — 512 с. — ISBN 5-7502-0089-2, ISBN 5-469-00821-5

 


Информация о работе Особенности разработки триггеров и хранимых процедур в СУБД