- •ЛЕКЦІЯ 14
- •План
- •Тригери
- •Цілі, що можна досягти
- •Недоліки тригерів
- •Формальний синтаксис
- •Типи тригерів
- •Тригери розрізняють по типу команд, на які вони реагують
- •Для кожного тригера створюється свій комплекттаблиць inserted і deleted
- •Використання тригера для реалізації обмежень на значення. В тій, що додається в таблицю
- •При продажу або отриманні товару необхідно відповідним чином змінити кількість його складського запасу.
- •Для товару, код якого вказаний при видаленні запису, необхідно відкоректувати його залишок на
При продажу або отриманні товару необхідно відповідним чином змінити кількість його складського запасу. Якщо товару на складі ще немає, необхідно додати відповідний запис в таблицю Склад. Тригер обробляє тільки один рядок, що додається.
ALTER TRIGGER Триггер_ins |
відповідний запис в таблицю Склад |
ON Операція FOR INSERT |
IF NOT EXISTS (SELECT * |
AS |
FROM Склад С, inserted i |
DECLARE @x INT @y INT |
WHERE С.КодТовара=i.КодТовара) |
IF @@ROWCOUNT=1 |
INSERT INTO Склад (КодТовара,Залишок) |
//--в таблицю Операція додається запис про |
ELSE |
поставку товару |
//--якщо запис про товар вже був в таблиці Склад, то |
BEGIN |
визначається код і кількість товару з доданої в |
//--кількість проданого товару повинна бути не |
таблицю Операція запису |
менше ніж його залишок з таблиці Склад |
BEGIN |
IF NOT EXISTS(SELECT * |
SELECT @y=i.КодТовара @x=i.Кількість |
FROM inserted |
FROM Операція З, inserted i |
WHERE -inserted.Кількість< =ALL(SELECT |
WHERE С.КодТовара=i.КодТовара |
Склад.Залишок |
//--і проводиться зміни кількості товару в Таблиці |
FROM Склад, Операція |
Склад |
WHERE Склад.КодТовара = Операція.КодТовара)) |
UPDATE Склад |
BEGIN |
SET Залишок=Залишок+@x |
ROLLBACK TRAN |
WHERE КодТовара=@y |
PRINT 'відкат - товару немає ' |
END |
END |
END |
//--якщо запису про поставлений товар ще немає |
|
додається |
|
Для товару, код якого вказаний при видаленні запису, необхідно відкоректувати його залишок на складі. Тригер обробляє тільки один запис, що
видаляється
CREATE TRIGGER Триггер_del ON Операція FOR DELETE AS
IF @@ROWCOUNT=1 //-- видалений один запис BEGIN
DECLARE @y INT,@x INT
//--визначається код і кількість товару з видаленої з таблиці Склад запису SELECT @y=КодТовара @x=Кількість
FROM deleted
//--в таблиці Склад коректується кількість Товару UPDATE Склад
SET Залишок=Залишок-@x WHERE КодТовара=@y END
