Пример выполнения работы




1. Создадим хранимую процедуру, которая выводит число заказов покупателя по вводимому в качестве параметра процедуры коду покупателя.

Параметр total является выходным, его значение равно числу заказов покупателя, код которого записывается во входной параметр user_kod. Процедура считает все строки, где код клиента совпадает с параметром user_kod.

До вызова процедуры присваиваем параметру процедуры значение кода клиента. Затем вызываем процедуру оператором CALL. Для вывода результата можно воспользоваться оператором SELECT.

2. Создадим хранимую процедуру, которая записывает в новую таблицу fevral все заказы, сделанные в феврале 2009 г. Предварительно необходимо создать новую пустую таблицу fevral со структурой, аналогичной структуре таблицы orders.

Хранимая процедура ord_fevr () использует курсор curf, который в цикле читает данные из таблицы orders и добавляет их в таблицу fevral.

Вызов процедуры осуществляется оператором call. Для просмотра результата выполнения процедуры используем полную выборку из таблицы fevral.

Лабораторная работа № 7
Создание триггеров

Теоретические сведения

Рассмотрим следующие вопросы:

· понятие триггера;

· создание триггеров с помощью оператора CREATE trigger;

· удаление триггеров с помощью оператора DROP trigger.

Триггер – эта та же хранимая процедура, но привязанная к событию изменения со­держимого конкретной таблицы.

Возможны три события, связанных с изменением содержимого таблицы, к которым можно привязать триггер:

· insert – вставка новых данных в таблицу;

· delete – удаление данных из таблицы;

· Update – обновление данных в таблице.

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

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

Создать новый триггер позволяет оператор:

CREATE TRIGGER trigger_name trigger_time trigger_event

ON tbl_name FOR EACH ROW trigger_stmt;

Оператор создает триггер с именем trigger_name, привязанный к таблице tbl_name. Не допускается привязка триггера к временной таблице или представлению. Конструкция trigger_time указывает момент выполнения триггера и может прини­мать два значения:

· before – действия триггера производятся до выполнения операции изменения таблицы;

· after – действия триггера производятся после выполнения операции изменения таблицы.

Конструкция trigger_event показывает, на какое событие должен реагировать триггер, и может принимать три значения:

· insert – триггер привязан к событию вставки новой записи в таблицу;

· update – триггер привязан к событию обновления записи таблицы;

· delete – триггер привязан к событию удаления записей таблицы.

Для таблицы tbl_name может быть создан только один триггер для каждого из со­бытий trigger_event и момента trigger_time. Таким образом, для каждой из таблиц мо­жет быть создано всего шесть триггеров.

Конструкция trigger_stmt представляет тело триггера – оператор, который необ­ходимо выполнить при возникновении события trigger_event в таблице tbl_name.

Если требуется выполнить несколько операторов, то необходимо использовать составной оператор begin... end. Синтаксис и допустимые операторы такие же, как и у хранимых процедур. Внутри составного оператора begin... end допускаются все специфичные для хранимых процедур операторы и конструкции:

· другие составные операторы begin... end;

· операторы управления потоком (if, case, while, loop, repeat, leave, iterate);

· объявления локальных переменных при помощи оператора declare и назначение им значений при помощи оператора set;

· именованные условия и обработчики ошибок.

В MySQL триггеры нельзя привязать к каскадному обновлению или удалению записей из таблицы типы InnoDB по связи первичный ключ/внешний ключ.

Триггеры сложно использовать, не имея доступа к новым записям, которые вставляются в таблицу, или старым записям, которые обновляются или удаляются. Для доступа к новым и старым записям используются префиксы new и old соответст­венно. Если в таблице обновляется поле total, то получить доступ к старому значению можно по имени old.total, а к новому – new.total.

Пример простейшего триггера для учебной БД book см. в пункте «Пример выполнения работы» (пример 1). Он демонстрирует работу триггеров после добавления запи­си в таблицу без вмешательства в запрос. Рассмотрим триггер, который будет включаться до вставки новых записей в таблицу orders и ограничивает число заказываемых товаров до 1:

Часто при обновлении полей таблицы производится попытка добавления некорректных значений. Пример триггера, который при добавлении нового покупателя преобразует полные имена и отчества в инициалы, см. в пункте «Пример выполнения работы» (пример 2). Он привязан к событию INSERT. Чтобы имя и отчество не могло быть отредактировано при помощи оператора update, можно создать триггер, привязанный к событию update.

Удаление триггеров. Удалить существующий триггер позволяет оператор

DROP TRIGGER trigger_name;

Практическая работа

При выполнении лабораторной работы необходимо:

· для заданной предметной области написать два триггера для разных таблиц базы данных;

· составить отчет по лабораторной работе.



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2017-10-12 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: