9.2.1 Синтаксис CREATE FUNCTION/DROP FUNCTION
CREATE [AGGREGATE] FUNCTION function_name RETURNS {STRING|REAL|INTEGER}
SONAME shared_library_name
DROP FUNCTION function_name
Определяемая пользователем функция (UDF) - это средство, позволяющее
расширить MySQL за счет новой функции, которая работает подобно ``родным''
(встроенным) функциям MySQL, таким как ABS()
и CONCAT()
.
AGGREGATE
- новая опция для версии MySQL 3.23. AGGREGATE
- функция работает
точно так же, как и ``родные'' GROUP
-функции MySQL GROUP
вроде SUM
или
COUNT()
.
CREATE FUNCTION
сохраняет имя, тип и имя разделяемой библиотеки функции в
системной таблице mysql.func
. Чтобы создавать и удалять функции,
необходимо обладать привилегиями INSERT
и DELETE
для базы данных mysql
.
Все активные функции подгружаются при каждом запуске сервера, за
исключением случая, когда mysqld
запускается с опцией --skip-grant-tables
.
Тогда инициализация UDF пропускается и UDFы недоступны (активная функция -
это функция, которая была загружена посредством CREATE FUNCTION
и не
удалена с помощью DROP FUNCTION
).
Инструкции по написанию определяемых пользователем функций находятся в
разделе See section 9.2 Добавление новых функций в MySQL. Чтобы механизм UDF работал, функции
должны быть написаны на C или C++, используемая операционная система
должна поддерживать динамическую загрузку и mysqld
должен быть
скомпилирован динамически (а не статически).
Отметим, что для того, чтобы работала AGGREGATE
, таблица mysql.func
должна
содержать столбец type
. В противном случае следует запустить сценарий
mysql_fix_privilege_tables
, чтобы внести нужные исправления.