FireBird. Установка, разработка баз данных, реализация запросов. Методические указания
.pdf3.6.2 Использование хранимых процедур для вставки, удаления и
обновления данных
Такие процедуры имеют входные параметры, но не имеют выходных.
Процедуры вставки и обновления строк таблиц в качестве входных параметров получает значения полей:
create procedure Sotrudnik _ins (pTab_nomer integer, pfio char(30), pDr_Date date, pAdres char(20))
as begin
insert into Sotrudnik ( Tab_nomer, FIO, Dr_Date, Adres ) values ( :pTab_nomer, : pfio, : pDr_Date, : pAdres); end;
Исполняемые процедуры вызываются командой:
Execute procedure < имя > (< список фактических параметров >);
Execute procedure Sotrudnik _ins ( 1, 'Petrov_P.P.', '05.09.1990', 'Orenburg' );
Список фактических и входных параметров должны совпадать по количеству, типу и порядку следования.
Процедура обновления имеет вид:
create procedure Sotrudnik _Update (pTab_nomer integer, pfio char(30), pDr_Date date, pAdres char(20))
as begin
update Sotrudnik
set FIO = : pfio, Dr_Date = : pDr_Date, Adres = : pAdres Where Tab_nomer = : pTab_nomer,
end;
Впроцедурах обновления обновляются значения одной строки,
идентифицируемой с помощью фразы where. Первичный ключ в реляционной
41
базе данных, как правило, генерируется автоматически, поэтому крайне редко осуществляется операция обновления самого первичного ключа.
3.7 Триггеры и генераторы
3.7.1 Поддержка первичных ключей
СУБД может поддерживать специальный тип полей для обеспечения уникальности первичных ключей.
Генератор – объект БД, который используется для получения значения по типу счетчика. Он создается командой:
Create generator < имя >;
По умолчанию ему присваивается значение 0. Изменить значение можно командой:
set generator < имя > to n;
Функция gen_id (< имя >, m) прибавляет к предыдущему значению генератора целое число m и возвращает его в качестве результата.
3.7.2 Триггеры
Триггеры – специальный вид хранимой процедуры. Триггер запускается автоматически при наступлении триггерного события. Различают триггеры,
которые срабатывают до наступления триггерного события – before-триггеры и триггеры, которые срабатывают после наступления триггерного события – after-триггеры.
Используются триггеры для проверки ограничений семантической целостности, обеспечения ссылочной целостности, а также реализации тех или иных действий в связанных таблицах.
В теле триггеры могут содержать: управляющие конструкции, операторы
SQL, вызовы хранимых процедур.
42
Для каждой таблицы можно создать несколько триггеров, запускаться они будут в порядке создания.
Общий вид оператора создания триггера: create trigger < имя >
for <т аблица >
active before | after insert | update | delete as
< объявление локальных переменных > begin
< тело триггера > end;
Замечание: если триггер создается в FireBird, следует помнить, что символ « ; » интерпретатор SQL воспринимает как конец команды. Поэтому вместо символа « ; » следует ввести временно новый разделитель с помощью оператора:
set term < новый разделитель > < старый разделитель >
т.е. set term ! ;
Представим, что необходимо создать триггер, реализующий проверку следующего условия при добавлении элементов в таблицу Bilet: нельзя, чтобы количество билетов превышало число кают (одна каюта = один билет).
set term ! ;
Создадим исключение, которое будет сгенерировано в случае ошибки:
create exception lick
'Число билетов превышает число кают!';
Создадим триггер:
create trigger warrior for bilet
active before insert
as
43
declare k integer;
begin
select count(*)
from bilet b, Pas_sudno P, Otpravlenie O
where (o.Name_pas_sudno =P.Name) and
(b.Data=O.Data) and
(b.Nomer_reisa=O.Nomer_reisa)
str.b.Nomer_reisa=new.b.Nomer_reisa and
str.b.Data =new.b.Data into: k;
if (:k>P.kol_vo_kayut) then exception lick;
end!
set term ; !
Если данное условие будет нарушено, на экране появится сообщение, заданное в исключении и операция добавления новой строки в таблицу bilet будет отменена. Таким образом, before - триггеры либо разрешают, либо запрещают осуществить ту или иную операцию манипулирования данными в таблице.
44
Список использованных источников
1 Советов, Б. Я. Базы данных: теория и практика: учебник для бакалавров / Б. Я. Советов, В. В. Цехановский, В. Д. Чертовской.- 2-е изд. -
Москва : Юрайт, 2013. - 463 с. - (Бакалавр. Базовый курс). - Прил.: с. 386-458. -
Библиогр.: с.459-460. - ISBN 978-5-9916-2913-3.
2 Соколинский, Л. Б. Параллельные системы баз данных: учебное пособие для студентов высших учебных заведений, обучающихся по направлениям ВПО 010400 «Прикладная математика и информатика» и 010300 «Фундаментальная информатика и информационные технологии» / Л. Б.
Соколинский; Юж.-Урал. гос. ун-т. - Москва : Изд-во Моск. ун-та, 2013. - 183 с. : ил. - (Суперкомпьютерное образование / Суперкомпьютер. консорциум ун-тов России). - Библиогр.: с. 175-176. - Предм. указ.: с. 177-179. - ISBN 978-5-211- 06482-9.
3 Кузнецов, С. Д. Базы данных. Модели и языки : учеб. для вузов / С. Д.
Кузнецов . - М. : Бином, 2008. - 720 с. - Прил.: с. 685-700. - Предм. указ.: с. 701720. - ISBN 978-5-9518-0132-6.
4 Кусмарцева, Н.Н. Разработка и эксплуатация удаленных баз данных
[Электронный ресурс]: учебное пособие/ Кусмарцева Н.Н.— Электрон.
текстовые данные.— Волгоград: Волгоградский институт бизнеса, Вузовское образование, 2013.— 143 c.— Режим доступа: http://www.iprbookshop.ru/11343
5 Королева О.Н. Базы данных [Электронный ресурс]: курс лекций/
Королева О.Н., Мажукин А.В., Королева Т.В.— Электрон. текстовые данные.—
М.: Московский гуманитарный университет, 2012.— 66 c.— Режим доступа: http://www.iprbookshop.ru/14515
45
