Шрифт:
Важной функцией триггеров является проверка с использованием выражений поступающих новых значений, а также использование других выражений для преобразования или создания значений для текущей строки или для строк в связанных таблицах. Например, следующий общий триггер проверяет, является ли значение NULL, и если да, то вызывает функцию для присваивания ему значения:
CREATE TRIGGER BI_MEMBERSHIP FOR MEMBERSHIP
ACTIVE BEFORE INSERT POSITION 0
AS
BEGIN
IF (NEW.MEMBER_ID IS NULL) THEN
NEW. MEMBER_I D - GEN_ID(GEN_MEMBER_ID, 1);
END
Подробную информацию о написании триггеров и хранимых процедур см. в части VII.
Вызовы функций
После установки Firebird содержит минимальный набор внутренних функций SQL. Хотя новые функции появляются время от времени, тем не менее сохраняется одно из основных достоинств Firebird: малый объем памяти, занимаемый сервером.
Функциональные возможности сервера могут быть легко расширены за счет его возможности получать доступ к функциям из внешних библиотек. Традиционно такие функции называются функциями, определенными пользователями (User-Defined Functions, UDF). Более корректно называть их внешними библиотеками функций. В реальности большинство администраторов баз данных используют хорошо протестированные библиотеки, находящиеся в общем пользовании и свободно распространяемые.
Внутренние функции SQL
В табл. 21.7 представлены внутренние функции SQL, доступные в Firebird.
Таблица 21.7. Внутренне реализованные функции SQL
Функция | Тип | Назначение |
CAST | Преобразование | Преобразует столбец из одного типа данных в другой |
EXTRACT | Преобразование | Выделяет части даты и времени (год, месяц, день и т.д.) из значений DATE, TIME и TIMESTAMP |
SUBSTRING | Строка | Отыскивает последовательность символов в строке |
UPPER | Строка | Преобразует символы в строке в верхний регистр |
GEN_ID | Генерация | Возвращает значение генератора |
AVGO | Агрегат | Вычисляет среднее значение набора значений |
COUNT | Агрегат | Возвращает количество строк, которые удовлетворяют условию поиска запроса |
MAX | Агрегат | Отыскивает максимальное значение в наборе значений |
MIN | Агрегат | Отыскивает минимальное значение в наборе значений |
SUM | Агрегат | Суммирует значения в наборе числовых значений |
Функции преобразования трансформируют типы данных, например, путем преобразования их из одного типа данных в другой совместимый тип, изменения масштаба или точности числовых значений или убирая какой-нибудь наследуемый атрибут из элемента данных. Можно сказать, что многие строковые функции также являются функциями преобразования, потому что они преобразуют способ хранения строковых значений, представленных в выходном наборе.
Функция CAST широко используется. Она позволяет преобразовывать элемент данных одного типа данных в другой тип или трактовать его как другой тип данных.
DSQL, PSQL, ISQL, ESQL, Firebird 1.5 и выше. Любая платформа.
CAST(значение AS <тип-данных>)
Фраза AS <тип-данных> с аргументом является обязательной.
значение является столбцом или выражением, которое преобразуется к типу данных, допустимому для преобразования в тип данных, названный в ключевом слове AS.
<тип-данных> должен быть родным типом данных Firebird. Нельзя указывать имя домена. Рис. 8.1 показывает все допустимые преобразования из одного типа в другой.
Функция возвращает вычисляемое поле заданного типа данных.
В следующем фрагменте PSQL поле LOG_DATE типа данных TIMESTAMP преобразуется в тип данных DATE, потому что для вычисления нужно получить целые дни:
. . .
IF (CURRENT_DATE - CAST (LOG_DATE AS DATE) = 30) THEN
STATUS = '30 DAYS';
Следующий оператор выбирает значение из столбца типа INTEGER, преобразует его в строку и соединяет со столбцом типа CHAR(3) для формирования значения другого столбца: