Слайд 1Введение в программирование SQL Server
Хранимые процедуры
Слайд 2Хранимые процедуры
Хранимые процедуры - это объекты базы данных, которые представляют
собой небольшие программы, манипулирующие данными и выполняемые на сервере.
Хранимая процедура
– это набор инструкций T-SQL, выполняемый как единое целое.
Хранимая процедура кроме команд языка SQL, могут использовать немногочисленные управляющие команды.
Слайд 3Хранимые процедуры
Создание
CREATE PROC[EDURE] имя_процедуры [параметры]
AS
операторы процедуры
Вызов
EXEC[UTE] имя_процедуры
[список_формальных_параметров]
Слайд 4Переменные
Локальные переменные (начинаются с символа @ )
Глобальные переменные (начинаются с
символов @@)
Объявление переменных
DECLARE имя_переменной тип_переменной
Слайд 5Операторы
Блок операторов
BEGIN … END
Оператор присвоения
SELECT переменная=значение
SET
переменная=значение
Условный оператор
IF условие Оператор1 [ELSE Оператор2]
Цикл
WHILE условие Оператор
Выбор
CASE выражение
WHEN вариант1 THEN выражение1
WHEN вариант2 THEN выражение2 …
ELSE выражениеN
END
Слайд 7Хранимые процедуры
Создание процедуры, использующий входной параметр
Вызов
Слайд 8Проверка существования клиента. Если фирма существует вывести подробную информацию о
фирме.
Использование условия
Слайд 9Проверка существования клиента. Если фирма существует вывести подробную информацию о
фирме. Наименование фирмы вводится с клавиатуры. Если фирмы не существует
выводится соответствующее сообщение
Слайд 10Использование цикла
Обновляется цена до тех пор пока средняя цена
Максимальная цена не должна превышать 200. В цикле выводится максимальная
цена
Слайд 11
Вывод содержимого, указанной таблицы или представления
Слайд 12Примеры хранимых процедур
Вывести данные о продажах клиентов из определенного города
или продажи определенного товара. Город и товар вводится с клавиатуры.
Способ
1.
Процедура создается в окне редактора запросов
Слайд 13Способ 2
Создайте представление в Конструкторе
Сохраните представление, как V_all
Слайд 14Способ 2
Создайте процедуру в окне редактора запросов
Сравните процедуры
Слайд 15Способ 1
Итоги продажи товара за год
Слайд 17Распродажа1. Уменьшить стоимость непродаваемых товаров в десять раз
Создать представление, отбирающее
непродаваемые товары
Создать хранимую процедуру, на основе представления
Выполнить процедуру
Слайд 18Распродажа2. Уменьшить стоимость непродаваемых товаров на указанное количество процентов.
Создать представление,
отбирающее непродаваемые товары
Создать хранимую процедуру, на основе представления
Выполнить процедуру
Слайд 22
Триггер - это специальный тип хранимой процедуры, которая автоматически выполняется
при каждой попытке изменить защищаемые его данные.
Триггеры не имеют
параметров и не выполняются явно. Это значит, что триггер запускается только при попытке изменения данных.
Слайд 23
По умолчанию все триггеры (INSERT, DELETE и UPDATE) срабатывают после
выполнения оператора изменения данных. Эти триггеры, называющиеся триггерами AFTER (после
)
Кроме того в SQL Server 2000 используются триггеры INSTEAD OF (вместо), которые выполняются вместо оператора предполагаемого изменения данных.
Слайд 24
CREATE TRIGGER имя_триггера ON имя_таблицы
FOR INSERT | UPDATE |
DELETE AS Код_триггера
Слайд 25
При добавлении строки в таблицу ее копия помещается во временную
таблицу с именем Inserted, при удалении - с именем Deleted.
При обновлении старая версия строки помещается во временную таблицу с именем Deleted, новая - с именем Inserted.
Слайд 26
CREATE TRIGGER ins_goods
ON sell FOR INSERT
AS
DECLARE @IDGoods int, @kolvo int
-- Выбираем код товара и
количество товара
SELECT @kolvo=I.num, @IDGoods=I.IDGoods
FROM Inserted I
INNER JOIN Goods T ON I.IDGoods = T.IDGoods
UPDATE Goods
Set store=store - @kolvo
Where IDGoods=@IDGoods
Слайд 27
CREATE TRIGGER ins_good
ON number FOR INSERT
AS
DECLARE @codG int, @kolvo int
-- Выбираем код товара
и количество товара
SELECT @kolvo=I.number, @codG=I.codG
FROM Inserted I
INNER JOIN Goods T ON I.codG = T.codG
UPDATE Goods
Set store=store - @kolvo
Where codG=@codG
Слайд 28
CREATE TRIGGER tr_good
ON Goods
FOR UPDATE
AS
DECLARE @Price MONEY, @CodG
INT
-- Проверка того, что учетная запись изменилась
IF UPDATE (price)
BEGIN
-- Выбираем
старую цену для товара, у которого она изменилась
SELECT @CodG=D.CodG, @Price=D.Price
FROM DELETED D INNER JOIN Goods T ON D.CodG=T.CodG
-- Вставка записи в таблицу история цен (t_history)
INSERT INTO T_History (CodG, Date_price, Price)
VALUES (@CodG, GETDATE(),@Price)
END