Лабораторная работа №7
Создание триггеров Триггер – эта та же хранимая процедура, но привязанная к событию изменения содержимого конкретной таблицы. Возможны три события, связанных с изменением содержимого таблицы, к которым можно привязать триггер: insert – вставка новых данных в таблицу; delete – удаление данных из таблицы; Update – обновление данных в таблице. MS Создадим триггер, который выполняется проверку при вставке новых данных в таблицу Клиент: если № Клиента задаётся равным 0, то вставка не выполняется, выводится сообщение: «Нельзя ввести такое число» и происходит откат назад: CREATE TRIGGER proverka ON Klient FOR INSERT AS IF EXISTS (SELECT * FROM Klient WHERE [N klienta]='0') BEGIN PRINT 'Нельзя ввести такое число' ROLLBACK TRANSACTION END GO USE [Notarius] GO Второй триггер не даёт вставить в таблицу Сделка Дату, которая ещё не наступила: CREATE TRIGGER DATE ON Sdelka FOR INSERT AS IF (SELECT Data FROM inserted) > GETDATE() BEGIN PRINT 'Вы ввели неверную дату!' ROLLBACK TRANSACTION; END GO ORACLE Данный триггер не позволит добавить в таблицу Услуга услугу дешевле 500: CREATE TRIGGER stUsl BEFORE INSERT ON Usluga FOR each row BEGIN if(new.stoimost_uslugi<500) then raise_application_error(-20000, 'Слишком маленькая стоимость!'); end if; END; / Данный триггер не позволяет заносить сделки, которые произошло позже 30 декабря 2012 года: CREATE TRIGGER tr2 BEFORE INSERT ON Sdelka FOR each row BEGIN if(new.data_sdelki>30-DEC-12) then raise_application_error(-20000, 'Неверная дата'); end if; END; Лабораторная работа №8 Транзакции Изменения БД часто требуют выполнения нескольких запросов, например при покупке в электронном магазине требуется добавить запись в таблицу заказов и уменьшить число товарных позиций на складе. В промышленных БД одно событие может затрагивать большее число таблиц и требовать многочисленных запросов. Если на этапе выполнения одного из запросов происходит сбой, это может нарушить целостность БД (товар может быть продан, а число товарных позиций на складе не обновлено). Чтобы сохранить целостность БД, все изменения должны выполняться как единое целое. Либо все изменения успешно выполняются, либо, в случае сбоя, БД принимает состояние, которое было до начала изменений. Это обеспечивается средствами обработки транзакций. Транзакция – последовательность операторов SQL, выполняющихся как единая операция, которая не прерывается другими клиентами. MS Пример транзакции: DECLARE @First int, @Second int BEGIN TRANSACTION UPDATE Skidka SET [Razmer skidki]=500 WHERE [N skidki]=5 SET @First=@@ERROR SAVE TRANSACTION SS UPDATE Skidka SET [Vid skidki]='Pensioneram' WHERE [N skidki]=5 SET @Second=@@ERROR IF @Second<>0 ROLLBACK TRANSACTION SS IF @First=0 AND @Second=0 BEGIN
|