![]() Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Практическая работа. Создание генераторов
Создание генераторов 92. Вызовите IBConsole, зарегистрируйтесь на сервере и зарегистрируйте БД IB_BIBL_ХХ (меню Database – Register…). 93. Выполните запрос в режиме Interactive SQL: CREATE GENERATOR GEN_NAKLS 94. К сожалению, в операторе SET GENERATOR начальное значение не может быть результатом запроса SELECT. Поэтому сначала с помощью следующего оператора получите (и запомните) очередное значение, которое нужно поместить в столбец NaklID таблицы NAKLS: SELECT MAX(NaklID)+1 FROM Nakls 95. Далее установите начальное значение генератора: SET GENERATOR Gen_Nakls TO число Здесь число — значение, полученное предыдущим оператором SELECT. 96. Создайте таким же образом генераторы GEN_BOOKS, GEN_FIRMS, GEN_ PAYMENTS и GEN_MOVEOOK для соответствующих таблиц. Создание триггеров 97. С помощью триггеров можно установить в автоинкрементное поле значение, полученное от генератора. Создайте такой триггер: CREATE TRIGGER BEF_INS_NAKLS FOR Nakls ACTIVE BEFORE INSERT AS BEGIN NEW.NaklID = GEN_ID(GEN_NAKLS, 1); END В первой строке помимо имени триггера BEF_INS_NAKLS (хотя триггеры нельзя вызвать обращением к ним по имени в хранимых процедурах или SQL-запросах, они, как и все другие сущности серверной БД, должны иметь уникальные имена) указывается также таблица Nakls, для которой он предназначен. Следующая строка указывает, когда триггер должен активизироваться (в нашем случае — перед вставкой новой записи). Третья строка содержит зарезервированное слово AS, которым открывается тело триггера. Тело триггера всегда (даже если триггер содержит единственный оператор, как в нашем случае) должно ограничиваться парой ключевых слов BEGIN и END. В пятой строке расположен единственный исполняемый оператор, в котором новому значению (предикат NEW) поля NaklID присваивается значение, полученное от встроенной функции GEN_ID. Двумя параметрами обращения к этой функции указывается имя генератора и то значение, на которое должно увеличиться текущее значение генератора («шаг» генератора). В триггерах INSERT и UPDATE можно обращаться к новому значению поля, если его имени предшествует предикат NEW, а в триггерах DELETE и UPDATE — к старому значению (предикат OLD). ВНИМАНИЕ Инициировать автоинкрементные поля с помощью генераторов можно только в триггерах, срабатывающих перед вставкой новой записи. 98. Аналогичным образом создайте триггеры BEF_INS_FIRMS, BEF_INS_MOVEB BEF_INS_BOOKS, BEF_INS_PAYMENTS для остальных автоинкрементных полей. 99. Создайте триггер, который перед удалением данных о накладной удаляет данные обо всех связанных с ней книгах:
|