FirebirdSQL logo
 PROCEDUREPACKAGE 

Внешние функции

Хранимая функция может быть расположена во внешнем модуле.В этом случае вместо тела функции указывается место расположения функции во внешнем модуле с помощью предложения EXTERNAL NAME.Аргументом этого предложения является строка, в которой через разделитель указано имя внешнего модуля, имя функции внутри модуля и определённая пользователем информация.В предложении ENGINE указывается имя движка для обработки подключения внешних модулей.В Firebird для работы с внешними модулями используется движок UDR.После ключевого слова AS может быть указан строковый литерал — "тело" внешней функции, оно может быть использовано внешним модулем для различных целей.

Warning

Не следует путать внешние функции, объявленные как DECLARE EXTERNAL FUNCTION, так же известные как UDF, с функциями расположенными во внешних модулях объявленных как CREATE FUNCTION …​ EXTERNAL NAME, называемых UDR (User Defined Routine). Первые являются унаследованными (Legacy) из предыдущих версий Firebird.Их возможности существенно уступают возможностям нового типа внешних функций.В Firebird 4.0 UDF объявлены устаревшими.

ALTER FUNCTION

Назначение

Изменение существующей хранимой функции.

Доступно в

DSQL

Синтаксис
ALTER FUNCTION funcname
[(<inparam> [, <inparam> ...])]
RETURNS <type> [COLLATE collation]
[DETERMINISTIC]
<routine-body>

Подробнее см. CREATE FUNCTION.

Оператор ALTER FUNCTION позволяет изменять состав и характеристики входных параметров, типа выходного значения, локальных переменных, именованных курсоров, подпрограмм и тело хранимой функции.Для внешних функций (UDR) вы можете изменить точку входа и имя движка.Внешние функции, объявленные как DECLARE EXTERNAL FUNCTION, так же известные как UDF, невозможно преобразовать в PSQL функции и наоборот.После выполнения существующие привилегии и зависимости сохраняются.

Note

Будьте осторожны при изменении количества и типов входных параметров хранимых функций.Существующий код приложения может стать неработоспособным из-за того, что формат вызова функции несовместим с новым описанием параметров.Кроме того, PSQL модули, использующие изменённую хранимую функцию, могут стать некорректными.Информация о том, как это обнаружить, находится в приложении Поле RDB$VALID_BLR.

Warning

Если у вас уже есть внешняя функция в Legacy стиле (DECLARE EXTERNAL FUNCTION), то оператор ALTER FUNCTION изменит её на обычную функцию без всяких предупреждений.Это было сделано умышлено для облегчения миграции на новый стиль написания внешних функций известных как UDR.

docnext count = 9

Кто может изменить функцию?

Выполнить оператор ALTER FUNCTION могут:

  • Администраторы

  • Владелец хранимой функции;

  • Пользователи с привилегией ALTER ANY FUNCTION.

Примеры

Example 1. Изменение хранимой функции
ALTER FUNCTION ADD_INT(A INT, B INT, C INT)
RETURNS INT
AS
BEGIN
  RETURN A+B+C;
END

CREATE OR ALTER FUNCTION

Назначение

Создание новой или изменение существующей хранимой функции.

Доступно в

DSQL

Синтаксис
CREATE OR ALTER FUNCTION funcname
[(<inparam> [, <inparam> ...])]
RETURNS <type> [COLLATE collation]
[DETERMINISTIC]
<routine-body>

Подробнее см. CREATE FUNCTION.

Оператор CREATE OR ALTER FUNCTION создаёт новую или изменяет существующую хранимую функцию.Если хранимая функция не существует, то она будет создана с использованием предложения CREATE FUNCTION.Если она уже существует, то она будет изменена и перекомпилирована, при этом существующие привилегии и зависимости сохраняются.

Warning

Если у вас уже есть внешняя функция в Legacy стиле (DECLARE EXTERNAL FUNCTION), то оператор CREATE OR ALTER FUNCTION изменит её на обычную функцию без всяких предупреждений.Это было сделано умышлено для облегчения миграции на новый стиль написания внешних функций известных как UDR.

Примеры

Example 1. Создание новой или изменение существующей хранимой функции
CREATE OR ALTER FUNCTION ADD_INT(A INT, B INT DEFAULT 0)
RETURNS INT
AS
BEGIN
  RETURN A+B;
END
См. также:

CREATE FUNCTION, ALTER FUNCTION.

DROP FUNCTION

Назначение

Удаление хранимой функции.

Доступно в

DSQL

Синтаксис
DROP FUNCTION funcname
Table 1. Параметры оператора DROP FUNCTION
Параметр Описание

funcname

Имя хранимой функции.

Оператор DROP FUNCTION удаляет существующую хранимую функцию.Если от хранимой функции существуют зависимости, то при попытке удаления такой функции будет выдана соответствующая ошибка.

Кто может удалить функцию?

Выполнить оператор DROP FUNCTION могут:

  • Администраторы

  • Владелец хранимой функции;

  • Пользователи с привилегией DROP ANY FUNCTION.

Примеры

Example 1. Удаление хранимой функции
DROP FUNCTION ADD_INT;
См. также:

CREATE FUNCTION.

RECREATE FUNCTION

Назначение

Создание новой или пересоздание существующей хранимой функции.

Доступно в

DSQL

Синтаксис
RECREATE FUNCTION funcname
[(<inparam> [, <inparam> ...])]
RETURNS <type> [COLLATE collation]
[DETERMINISTIC]
<routine-body>

Подробнее см. CREATE FUNCTION

Оператор RECREATE FUNCTION создаёт новую или пересоздаёт существующую хранимую функцию.Если функция с таким именем уже существует, то оператор попытается удалить её и создать новую функцию.Операция закончится неудачей при подтверждении транзакции, если функция имеет зависимости.

Note

Имейте в виду, что ошибки зависимостей не обнаруживаются до фазы подтверждения транзакции.

После пересоздания функции привилегии на выполнение хранимой функции и привилегии самой хранимой функции не сохраняются.

Примеры

Example 1. Создание или пересоздание хранимой функции
RECREATE FUNCTION ADD_INT(A INT, B INT DEFAULT 0)
RETURNS INT
AS
BEGIN
  RETURN A+B;
END
См. также:

CREATE FUNCTION, DROP FUNCTION.