ттттт. Практическая работа Создание и применение последовательностей (sequence). Создание простейших dmlтриггеров (trigger)
Скачать 174.07 Kb.
|
Практическая работа 9. Создание и применение последовательностей (sequence). Создание простейших DML-триггеров (trigger) Последовательность (sequence) или генератор (generator) — объект БД, предназначенный для получения уникального числового значения. Термин последовательность является SQL совместимым. Ранее в Interbase и Firebird последовательности называли генераторами. Независимо от диалекта БД последовательности (генераторы) хранятся как 64-битные целые значения. Синтаксис инструкции: CREATE {SEQUENCE | GENERATOR} gen_name; Операторы CREATE SEQUENCE и CREATE GENERATOR являются синонимами — оба создают новую последовательность. Можно использовать любое из них, но рекомендуется использовать CREATE SEQUENCE, если важно соответствие стандарту. В момент создания последовательности ей устанавливается значение равное 0. В дальнейшем при обращении к конструкции NEXT VALUE FOR её значение увеличивается на единицу. Значение последовательности изменяется также при обращении к функции GEN_ID, где в качестве параметра указывается имя последовательности и значение приращения. Создать последовательность (генератор) может любой пользователь, подсоединившийся к БД. Триггер (trigger) — это хранимая процедура особого типа, которая не вызывается непосредственно, а исполнение которой обусловлено наступлением одного из событий, относящегося к одной конкретной таблице (представлению), или наступлению одного из событий базы данных. Оператор TRIGGER'>CREATE TRIGGER создаёт новый триггер. Триггер может быть создан для события (или событий) отношения (таблицы или представления) или для одного из событий БД. Операторы CREATE TRIGGER, ALTER TRIGGER, CREATE OR ALTER TRIGGER и RECREATE TRIGGER являются составными операторами, содержащими заголовок и тело. Заголовок определяет имя триггера, а также содержит имя отношения (для табличных триггеров), фазу триггера, событие (или события) на которые срабатывает триггер и позицию. Имя триггера должно быть уникальным среди имён других триггеров. Тело триггера состоит из необязательных объявлений локальных переменных и именованных курсоров, и одного или нескольких операторов или блоков операторов, заключённых во внешнем блоке, который начинается с ключевого слова BEGIN и заканчивается ключевым словом END. Объявления и внутренние операторы завершаются точкой с запятой (;). DML триггеры (на таблицу или представление) DML триггеры выполняются на уровне строки (записи) каждый раз, когда изменяется образ строки. Они могут быть определены и для таблиц и представлений. Форма объявления Объявление DML триггера существует в двух вариантах: своеобразная, унаследованная форма; SQL-2003 совместимая (рекомендуемая). В настоящее время рекомендуется использовать SQL-2003 совместимую форму. Для DML триггера обязательно указывается фаза и одно или несколько событий. Состояние триггера Триггер может быть в одном из двух состояний активном (ACTIVE) или неактивном (INACTIVE). Запускаются только активные триггеры. По умолчанию триггеры создаются в активном состоянии. Фаза Триггер может выполняться в одной из двух фаз, связанных с запрошенными изменениями состояния данных. Ключевое слово BEFORE означает, что триггер вызывается до наступления соответствующего события (событий, если их указано несколько), AFTER — после наступления события (событий). События Для DML триггера может быть указано одно из событий таблицы (представления) – INSERT (добавление), UPDATE (изменение), DELETE (удаление) — или несколько событий, разделённых ключевым словом OR, при которых вызывается триггер. При создании триггера каждое событие (INSERT, UPDATE или DELETE) не должно упоминаться более одного раза. Контекстные переменные INSERTING, UPDATING и DELETING логического типа могут быть использованы в теле триггера для определения события, которое вызвало срабатывание триггера. Порядок срабатывания Ключевое слово POSITION позволяет задать порядок, в котором будут выполняться триггеры с одинаковой фазой и событием (или группы событий). По умолчанию позиция равна 0. Если позиции для триггеров не заданы или несколько триггеров имеют одно и то же значение позиции, то такие триггеры будут выполняться в алфавитном порядке их имен. Тело триггера Тело триггера может содержать объявления локальных переменных и курсоров. После секции объявления следует основной блок BEGIN ... END, в который заключается PSQL код триггера. В этом блоке могут содержаться DML и PSQL операторы, а также вложенные BEGIN ... END блоки. Любой из BEGIN ... END блоков может быть пустым, в том числе и главный блок. Только владелец таблицы (представления) для которой создаётся DML триггер и администраторы имеют привилегии на использование CREATE TRIGGER. Задание 1. Создать новую БД. Создать генераторы и триггеры для генерации целочисленных значений первичных ключей. Задание 2. Рассмотрев примеры, выполнить добавление данных (3-5 строк в каждую таблицу) с помощью оператора INSERT. Добавление данных в таблицу или представление выполняется с помощью запроса INSERT. Существуют однострочный и многострочный запросы INSERT. Синтаксис запроса INSERT: INSERT INTO { базовая_таблица | представление} [(столбец1 [, столбец2] ...)] VALUES ({константа1 | переменная1} [,{константа2 | переменная2}] ...) [RETURNING <список_столбцов> [INTO <список_переменных>]]; Примеры. 1) Вставка строк в таблицу STREET 2) Если требуется ввести NULL-значения, то оно добавляется как обычное значение (если поле допускает хранение пустых значений) Задание 3. Открыть БД, созданную на предыдущем занятии. Создать генераторы и триггеры для генерации целочисленных значений первичных ключей. Для каждой таблицы создаем свой генератор, так как, если вы примените генератор повторно в другой таблице, то значения генератора будут распределяться по всем таблицам. Задание 4. В тетрадь записать основные моменты по созданию генераторов и триггеров DML |