Агрегатные функции используются для получения обобщающих значений. Они, в отличие от скалярных функций, оперируют значениями столбцов множества строк. К агрегатным функциям относятся такие функции, как SUM, вычисляющая итог, MAX и MIN, возвращающие наибольшее и наименьшее значения соответственно, AVG, вычисляющая среднее значение, и COUNT, вычисляющая количество значений в столбце.
Функции для списка значений представлены тремя функциями – MAXVALUE, MINVALUE и LIST. Функции MAXVALUE и MINVALUE в чем-то похожи на агрегатные функции MAX и MIN, однако выбирают максимальное и минимальное значение не из множества значений строк в одном столбце, а из значений, заданных в списке аргументов. Функция LIST объединяет обрабатываемые значения в единую строку.
Функции, определяемые пользователем (UDF), являются вспомогательными программами, написанными на языке программирования, таком как C, C++ или Pascal, и скомпилированными как совместно используемые двоичные библиотеки – DLL [18]. Внешние функции можно использовать в выражениях, так же как и встроенные функции SQL. Как и встроенные функции, они могут возвращать значения для переменных или выражений SQL в хранимых процедурах и триггерах.
СУБД Firebird поставляет две готовые к использованию библиотеки UDF: ib_udf и fbudf. Firebird загружает UDF из библиотек, находящихся в каталоге udf каталога инсталляции или в других каталогах, указанных в параметре UdfAccess в файле конфигурации Firebird. Когда пользовательская функция написана, скомпилирована и инсталлирована в соответствующий каталог на сервере, она должна быть объявлена для базы данных, чтобы ее можно было использовать как функцию SQL. Для объявления внешней функции используется оператор DECLARE EXTERNAL FUNCTION. Можно объявить функцию также с использованием любого интерактивного инструмента SQL или скрипта. После того как функция будет объявлена для любой базы данных на сервере, содержащая ее библиотека будет загружаться при первом же обращении приложения к любой функции, включенной в эту библиотеку. Необходимо объявить каждую функцию, которую нужно использовать, для каждой базы данных, которая будет использоваться.
предыдущаяследующая