Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Работа с хранимыми процедурами.docx
Скачиваний:
2
Добавлен:
17.04.2019
Размер:
36.07 Кб
Скачать

Изменение и удаление хранимых процедур

Изменение хранимой процедуры производится оператором

ALTER PROCEDURE <имя процедуры>

[(<входной параметр > <тип данных>

[,<входной параметр > <тип данных> …])]

[RETURNS

[(<выходной параметр > <тип данных>

[,<выходной параметр > <тип данных> …])]

AS

<тело процедуры>;

Принципы построения оператора аналогичны изложенным выше принципам построения оператора CREATE PROCEDURE.

Для удаления хранимой процедуры из БД используется оператор

DROP PROCEDURE <имя процедуры>

Работа с триггерами

Триггерпроцедура базы данных, автоматически вызываемая сервером при обновлении,, удалении или добавлении новой записи в таблицу. Нельзя обратиться к триггерам непосредственно из программы. Нельзя передавать триггерам входные параметры и получать от них значения выходных параметров, т.е. триггеры всегда реализуют действие.

По событию изменения таблицы БД триггеры различаются на вызываемые при

  • добавлении новой записи;

  • изменении существующей записи;

  • удалении записи.

По отношению к событию, влекущему их вызов, триггеры различают на:

  • выполняемые до наступления события;

  • выполняемые после наступления события;

Преимущества использования триггеров:

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

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

При откате транзакции отменяются также и все изменения, внесенные в базу данных триггерами.

Создание триггеров.

Триггер создается оператором

CREATE TRIGGER <имя триггера> FOR <имя таблицы>

[ACTIVE/INACTIVE]

{BEFORE/AFTER}

{DELETE/INSERT/UPDATE}

[POSITION номер]

AS <тело триггера>

Для определения тела триггера используется процедурный язык (по аналогии с ХП). В него добавляется возможность доступа к старому и новому значениям столбцов изменяемой записи OLD и NEW – возможность недоступная при определении тела хранимых процедур.

Структура тела триггера:

[<объявление локальных переменных>]

BEGIN

<оператор>

[<оператор>…]

END

В заголовке триггера:

  • [ACTIVE/INACTIVE]указывает, активен триггер или нет (по умолчанию ACTIVE) В процессе работы триггер можно переопределить как активный или неактивный.

  • {BEFORE/AFTER}указывает, будет выполняться триггер до (BEFORE) или после (AFTER) запоминания изменений в базе данных.

  • {DELETE/INSERT/UPDATE}указывает операцию над таблицей базы данных, при выполнении которой срабатывает триггер.

  • [POSITION номер]указывает, каким по счету будет выполняться триггер в случае наличия группы триггеров, обладающих одинаковыми характеристиками операции и времени вызова триггера. Триггеры с меньшими номерами выполняются раньше.

Пример:

CREATE TRIGGER A FOR RASHOD

BEFORE INSERT POSITION 1 …

Значение OLD.ИмяСтолбцапозволяет обратиться к состоянию столбца, имевшему место до внесения возможных изменений.

Значение NEW.ИмяСтолбца - позволяет обратиться к состоянию столбца после внесения возможных изменений.

Пример:

CREATE TRIGGER BU_TOVARY FOR TOVARY

ACTIVE

BEFORE UPDATE

AS

BEGIN

IF (OLD.TOVAR<>NEW.TOVAR) THEN

UPDATE RASHOD

SET TOVAR=NEW.TOVAR

WHERE TOVAR=OLD.TOVAR;

END

В этом примере триггер вносит соответствующие изменения в таблицу RASHOD, если в записи таблицы TOVARY изменилось значение столбца TOVAR.