27_SH43-0144-00 (1038594), страница 33
Текст из файла (страница 33)
Например, перед принятием заказа илиобновлением сводной таблицы данных триггер может проверять, не превышенли предел кредита для данного покупателя.Преимущества использования триггеров:v Ускорение разработки прикладных программ: Поскольку триггер хранится вбазе данных, не требуется кодировать его действие в каждой прикладнойпрограмме.v Упрощение обслуживания: После того, как триггер определен, онавтоматически вызывается при обращениях к таблице, для которой он создан.v Глобальное задание логических правил: При изменении логических правилнужно изменить только триггер, а не все прикладные программы.Чтобы создать триггер с помощью Центра управления:|1.
Раскройте дерево объектов и найдите папку Триггеры.2. Щелкните правой кнопкой мыши по папке Триггеры и выберите из всплывающегоменю пункт Создать.3. Задайте информацию об этом триггере.4. Задайте действие, вызываемое этим триггером, и нажмите кнопку OK.Чтобы создать триггер из командной строки, введите команду:|||||CREATE TRIGGER <имя><действие> ON <имя_таблицы><операция><действие_триггера>Следующий оператор SQL создает триггер, увеличивающий общее числосотрудников при приеме на работу нового человека, для чего он при каждомдобавлении строки в таблицу EMPLOYEE прибавляет 1 к значению числасотрудников в столбце NBEMP таблицы COMPANY_STATS.140Руководство администратора: РеализацияCREATE TRIGGER NEW_HIREDAFTER INSERT ON EMPLOYEEFOR EACH ROW MODE DB2SQLUPDATE COMPANY_STATS SET NBEMP = NBEMP+1;|Тело триггера может содержать один или несколько операторов SQLследующих типов: INSERT, UPDATE с поиском, DELETE с поиском, полнаявыборка, SET, задающий значение временных переменных, и SIGNALSQLSTATE.
Триггер может активироваться до (BEFORE) или после (AFTER)выполнения оператора INSERT, UPDATE или DELETE, для которого онопределен. Полную информацию о синтаксисе оператора CREATE TRIGGERсмотрите в руководстве SQL Reference. Информацию о создании ииспользовании триггеров смотрите в руководстве Application Development Guide.||||Примечание: Для триггера типа BEFORE в действии триггера нельзя задаватьимя генерируемого столбца, если только это не столбецидентификации. Это значит, что в триггере BEFORE можноиспользовать значение генерируемого столбца идентификации.|Зависимости триггераВсе зависимости триггера от других объектов записываются в каталогеSYSCAT.TRIGDEP. Триггер может зависеть от многих объектов.
Эти объекты изависимые от них триггеры подробно описаны в главе об операторе DROPруководства SQL Reference.Если один из этих объектов отброшен, триггер становится неработоспособным,но его определение сохраняется в каталоге. Чтобы восстановитьработоспособность этого триггера, необходимо получить из каталога егоописание и ввести новый оператор CREATE TRIGGER.Если триггер отброшен, его описание удаляется из производной таблицыкаталога SYSCAT.TRIGGERS и все его зависимости удаляются из производнойтаблицы каталога SYSCAT.TRIGDEP.
Все пакеты, имеющие зависимостиоператоров UPDATE, INSERT или DELETE от этого триггера, становятсянедействительными.Если зависимый объект - это производная таблица, и она сталанеработоспособной, триггер также отмечается как неработоспособный. Всепакеты, зависящие от триггера, отмеченного как неработоспособный, становятсянедействительными. (Дополнительную информацию смотрите в разделе“Зависимости операторов при изменении объектов” на стр. 221.)Глава 3. Создание базы данных141| Создание пользовательской функции или метода||||||||Пользовательские функции расширяют возможности, предоставляемыевстроенными функциями SQL, и их можно использовать везде, где могутиспользоваться встроенные функции. Пользовательскую функцию можносоздать как:v Внешнюю функцию, которая написана на одном из языковпрограммированияv Функцию с источником, реализация которой наследуется от какой-либодругой существующей функции|Существует три типа пользовательских функций:СкалярнаяПри каждом вызове возвращает одно значение.
Пример скалярнойфункции - встроенная функция SUBSTR(). Скалярные пользовательскиефункции могут быть внешними функциями или функциями систочником.Функция столбцаВозвращает одно значение для набора однородных значений (столбца).В DB2 иногда также называется сводной функцией. Пример функциистолбца - встроенная функция AVG(). В DB2 нельзя определитьвнешнюю пользовательскую функцию столбца, но ее можно определитьна основе одной из встроенных функций столбца. Это удобно дляпользовательских типов.Например, если имеется пользовательский тип SHOESIZE,определенный на основе типа INTEGER, можно определитьпользовательскую функцию столбца AVG(SHOESIZE), источникомкоторой будет встроенная функция AVG(INTEGER).ТабличнаяВозвращает вызвавшему ее оператору SQL таблицу. Табличныефункции можно вызывать только из условия FROM оператора SELECT.Такие функции позволяют применять возможности языка SQL кданным, не являющимся данными DB2, или преобразовывать такиеданные в таблицу DB2.Например, табличная функция может брать файл и преобразовывать егов таблицу, может вносить в таблицу примеры данных из WWW илиобращаться к базе данных Lotus Notes и возвращать информацию описьмах, например, дату, от кого получено письмо и текст сообщения.Эту информацию можно затем объединить с другими таблицами базыданных.Табличная функция может быть только внешней функцией.
Она неможет быть функцией с источником.142Руководство администратора: РеализацияИнформация о существующих пользовательских функций записывается впроизводные таблицы каталога SYSCAT.FUNCTIONS и SYSCAT.FUNCPARMS.Системный каталог не содержит выполняемого кода пользовательской функции.(Поэтому, создавая планы резервного копирования и восстановления, нужнопринять решения насчет выполняемых файлов пользовательских функций.)При компиляции операторов SQL важна статистическая информация опроизводительности пользовательских функций. Информацию о том, какобновлять статистики пользовательских функций в системном каталоге,смотрите в главе “Обновление статистики для пользовательских функций”смотрите в руководстве Руководство администратора: Производительность.Подробную информацию об использовании оператора CREATE FUNCTION длянаписания пользовательских функций для конкретной прикладной программысмотрите в руководстве Application Development Guide.
Подробную информациюо синтаксисе пользовательских функций смотрите в руководстве SQL Reference.Создание отображения функцииВ базе данных объединения для отображения локальной функции илилокального шаблона функции (описанного в разделе “Создание шаблонафункции” на стр. 144) на функцию на одном или нескольких источниках данныхнужно создать отображение функции.
Для многих функций источников данныхсуществуют отображения функций по умолчанию.Отображения функций удобны, когда:v На источнике данных становятся доступны новые встроенные функции.v Нужно отобразить пользовательскую функцию источника данных налокальную функцию.v Для прикладной программы требуется поведение, отличное от поведения поумолчанию, определяемого отображением по умолчанию.Отображения функций, определенные с помощью операторов CREATEFUNCTION MAPPING, хранятся в базе данных объединения.Функции (или шаблоны функций) должны иметь то же число входныхпараметров, что и функция источника данных. Кроме того, типы данныхвходных параметров на стороне объединения должны быть совместимы стипами данных входных параметров на стороне источника данных.Для создания отображения функции используется оператор CREATE FUNCTIONMAPPING. Например, для создания отображения функции между функциейOracle AVGNEW и эквивалентной ей функцией DB2 на сервере ORACLE1:CREATE FUNCTION MAPPING ORAVGNEW FOR SYSIBM.AVG(INT) SERVER ORACLE1OPTIONS (REMOTE_NAME 'AVGNEW')Глава 3.
Создание базы данных143Чтобы использовать этот оператор, необходимо обладать полномочиямиSYSADM или DBADM для базы данных объединения. Атрибуты отображенияфункции хранятся в SYSCAT.FUNCMAPPINGS.Сервер объединения не будет связывать входные переменные хоста или получатьрезультаты типов большой объект, LONG VARCHAR/VARGRAPHIC,DATALINK, пользовательских типов и структурированных типов. Нельзясоздать отображение функции, если входные параметры или возвращаемоезначение относятся к одному из этих типов.Дополнительную информацию об использовании и создании отображенийфункций смотрите в руководстве Application Development Guide. Подробноеописание синтаксиса оператора CREATE FUNCTION MAPPING смотрите вруководстве SQL Reference.Создание шаблона функцииВ системе объединения для “привязки” отображений функций используютсяшаблоны функций.
Они используются, чтобы разрешить отображение функцииисточника данных, когда соответствующая функция DB2 не существует насервере объединения. Для отображения функции требуется наличие шаблонафункции или существование подобной функции в DB2.Шаблон представляет собой лишь оболочку функции: имя, входные параметрыи возвращаемое значение.