Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

FireBird. Установка, разработка баз данных, реализация запросов. Методические указания

.pdf
Скачиваний:
0
Добавлен:
12.08.2026
Размер:
867 Кб
Скачать

3.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