Пример выполнения работы
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 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|