FUNCTION#

Synopsis#

FUNCTION name ( [ parameter_name data_type [, ...] ] )
  RETURNS type
  [ LANGUAGE language]
  [ NOT? DETERMINISTIC ]
  [ RETURNS NULL ON NULL INPUT ]
  [ CALLED ON NULL INPUT ]
  [ SECURITY { DEFINER | INVOKER } ]
  [ COMMENT description]
  [ WITH ( property_name = expression [, ...] ) ]
  { statements | AS definition }

Описание#

Объявляет пользовательскую функцию.

name — имя UDF. Inline пользовательские функции может использовать простую строку. Catalog user-defined functions должен включать имя каталога и схемы, разделённые ., чтобы сохранить UDF, или использовать каталог и схему по умолчанию для хранения UDF.

Список параметров — это список, разделённый запятыми, состоящий из имён parameter_name и типов данных data_type, см. типы данных. Пустой список, заданный как (), также допустим.

Значение type после ключевого слова RETURNS определяет тип данных результата UDF.

Необязательная характеристика LANGUAGE определяет язык, используемый для описания UDF, через language. По умолчанию поддерживаются языки SQL и PYTHON. Дополнительные языки могут поддерживаться через плагины языковых движков. Если не указано, по умолчанию используется SQL.

Необязательная характеристика DETERMINISTIC или NOT DETERMINISTIC указывает, является ли UDF детерминированной. Это означает, что повторные вызовы функции с одинаковыми входными параметрами дают одинаковый результат. UDF считается недетерминированной, если она вызывает другие недетерминированные UDF или функции. По умолчанию UDF считаются детерминированными.

Необязательная характеристика RETURNS NULL ON NULL INPUT указывает, что UDF возвращает NULL, если любой из входных параметров равен NULL. В этом случае сама функция не вызывается.

Характеристика CALLED ON NULL INPUT означает, что UDF вызывается даже при наличии NULL во входных параметрах.

Характеристики RETURNS NULL ON NULL INPUT и CALLED ON NULL INPUT взаимоисключающие, при этом по умолчанию используется CALLED ON NULL INPUT.

Параметр безопасности SECURITY INVOKER или SECURITY DEFINER применяется только к UDF уровня каталога. Он задаёт режим выполнения функции с правами пользователя, который вызывает функцию (INVOKER), или пользователя, который её создал (DEFINER).

Характеристика COMMENT может использоваться для добавления описания функции (description), доступного другим пользователям. Эта информация доступна через SHOW FUNCTIONS.

Необязательное выражение WITH может использоваться для задания свойств функции. Доступные свойства зависят от языка функции. Для Python user-defined functions свойство handler указывает имя Python-функции, которую необходимо вызвать.

Для SQL UDF тело функции может быть либо простым выражением с одним оператором RETURN, либо составным списком statements внутри блока BEGIN. UDF должна содержать оператор RETURN в конце верхнего уровня блока, даже если он недостижим.

Для UDF на других языках definition задаётся строкой в кавычках $$.

Примеры#

Простая функция каталога:

CREATE FUNCTION example.default.meaning_of_life()
  RETURNS BIGINT
  RETURN 42;

И её использование:

SELECT example.default.meaning_of_life(); -- returns 42

Эквивалентное использование с inline-функцией:

WITH FUNCTION meaning_of_life()
  RETURNS BIGINT
  RETURN 42
SELECT meaning_of_life();

Дополнительные примеры различной сложности, демонстрирующие использование оператора FUNCTION в сочетании с другими операторами, доступны в документации SQL UDF и документации Python UDF.

См. также#