Spec-Zone .ru
спецификации, руководства, описания, API

13.7.3.1. CREATE FUNCTION Синтаксис для Пользователя-DefinedFunctions

CREATE [AGGREGATE] FUNCTION function_name RETURNS {STRING|INTEGER|REAL|DECIMAL}    SONAME shared_library_name

Определяемая пользователем функция (UDF) является способом расширить MySQL с помощью новой функции, которая работает как собственная (встроенная) функция MySQL такой как ABS() или CONCAT().

function_name имя, которое должно использоваться в SQL-операторах, чтобы вызвать функцию. RETURNS пункт указывает на тип возвращаемого значения функции. DECIMAL юридическое значение после RETURNS, но в настоящий момент DECIMAL строковые значения возврата функций и должны быть записаны как STRING функции.

shared_library_name базовое имя совместно используемого объектного файла, который содержит код, который реализует функцию. Файл должен быть расположен в сменном каталоге. Этот каталог дается значением plugin_dir системная переменная. Для получения дополнительной информации см. Раздел 22.3.2.5, "Компилируя и Устанавливая Определяемые пользователем Функции".

Чтобы создать функцию, Вы должны иметь INSERT полномочие для mysql база данных. Это необходимо потому что CREATE FUNCTION добавляет строка к mysql.func системная таблица, которая записывает имя функции, вводит, и совместно использованное имя библиотеки. Если у Вас нет этой таблицы, следует выполнить mysql_upgrade команду, чтобы создать ее. См. Раздел 4.4.7, "mysql_upgrade — Таблицы MySQL Check и Upgrade" .

Активная функция является той, которая была загружена CREATE FUNCTION и не удаленный с DROP FUNCTION. Все активные функции перезагружаются каждый раз, когда сервер запускается, если Вы не запускаете mysqld с --skip-grant-tables опция. В этом случае инициализация UDF пропускается, и UDFs недоступны.

Для получения инструкций по записи определяемых пользователем функций см. Раздел 22.3.2, "Добавляя Новую Определяемую пользователем Функцию". Для механизма UDF, чтобы работать, функции должны быть записаны в C или C++ (или другой язык, который может использовать соглашения о вызовах C), Ваша операционная система должна поддерживать динамическую загрузку, и Вы, должно быть, скомпилировали mysqld динамически (не статически).

AGGREGATE функционируйте работы точно как собственный агрегат MySQL (сводка) функция такой как SUM или COUNT(). Для AGGREGATE работать, Ваш mysql.func таблица должна содержать a type столбец. Если Ваш mysql.func у таблицы нет этого столбца, следует выполнить mysql_upgrade программу, чтобы создать это (см. Раздел 4.4.7, "mysql_upgrade — Таблицы MySQL Check и Upgrade").

Отметить

Обновить совместно используемую библиотеку, связанную с UDF, проблемой a DROP FUNCTION оператор, обновите совместно используемую библиотеку, и затем проблему a CREATE FUNCTION оператор. Если Вы обновляете совместно используемую библиотеку сначала и затем используете DROP FUNCTION, сервер может отказать.