Контрольная работа: Особенности проектирования баз данных
begin
update books C
set C.id_publishers = new.id_publishers
where c.id_publishers = old.id_publishers;
end
else
begin
delete from books C
where c.id_publishers = old.id_publishers;
end
end
^
SET TERM ; ^
Так как данный триггер выполняется при изменении и удалении записей из таблицы «PUBLISHERS», то в нём задано условие, проверяющее, какая операция над записями этой таблицы производится. IF (updating) THEN= ИСТИНА, если операция изменения (UPDATE), иначе =ЛОЖЬ (для данного триггера это операция удаления). В первом случае производится каскадное обновление записей при помощи оператора изменения данных UPDATE, во втором каскадное удаление при помощи операции DELETEFROM. В обоих случаях условием отбора записей на изменение или удаление является равенство значений поля «ID_PUBLISHERS» таблицы «BOOKS» и старым значением поля «ID_PUBLISHERS» таблицы «PUBLISHERS». В случае изменения данных этим полям присваиваются новые значения записей.
Аналогично создадим триггер каскадного обновления и удаления записей таблицы «BOOKS» при обновлении и удалении соответствующих им записей в таблице «READERS» – «READERS_CASCADE_BOOKS». Разница здесь в том, что триггер будет задан для таблицы «READERS» и в записях сравниваются значения полей «ID_ABONENT».
Создание хранимых процедур
Создадим три хранимых процедуры.
Первая процедура будет выводить список книг, находящихся в библиотеке. Для этого зададим запрос на выборку списка книг, в поле «BOOKS.ID_ABONENT» которых стоит значение NULL.
Для создания новой процедуры выберем Procedures\NewProcedure(Процедуры\Новая процедура). Выберем OutputParameters (Выходные Параметры) затем Insertparameter/variable (Добавить параметр/переменную). Добавим параметр «NAME_BOOKS VARCHAR(30)» под название книги, а также ещё два – под наименование и город издательства – соответственно «NAME_PUBLISHERS VARCHAR(20)» и «CITY_PUBLISHERS VARCHAR(20)».
Листинг первой процедуры «BOOKS_LIBRARY»:
CREATE PROCEDURE BOOKS_LIBRARY
returns (
city_publishers varchar(20) character set win1251,
name_publishers varchar(20) character set win1251,
name_books varchar(30) character set win1251)
as
begin
for
select distinct books.name, publishers.name, publishers.city
from books inner join publishers on books.id_publishers = publishers.id_publishers