InterBase - статьи

         

Функции


Функции позволяют многократно наращивать функциональность InterBase сервера за счет подключения внешних модулей, выполненных в виде модулей dll.

Вот так можно получить список функций, зарегистрированных в базе данных.

SELECT RDB$FUNCTIONS.RDB$FUNCTION_NAME, RDB$FUNCTIONS.RDB$SYSTEM_FLAG FROM RDB$FUNCTIONS WHERE ( (RDB$FUNCTIONS.RDB$SYSTEM_FLAG = 0) or (RDB$FUNCTIONS.RDB$SYSTEM_FLAG IS NULL) );

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

SELECT RDB$FUNCTIONS.RDB$FUNCTION_NAME, RDB$FUNCTIONS.RDB$DESCRIPTION, RDB$FUNCTIONS.RDB$MODULE_NAME, RDB$FUNCTIONS.RDB$ENTRYPOINT, RDB$FUNCTIONS.RDB$RETURN_ARGUMENT FROM RDB$FUNCTIONS WHERE ( (RDB$FUNCTIONS.RDB$SYSTEM_FLAG = 0) or (RDB$FUNCTIONS.RDB$SYSTEM_FLAG IS NULL) );

Воспользовавшись информацией из таблицы RDB$FUNCTION_ARGUMENTS, можно получить сведения об аргументах функций.

SELECT RDB$FUNCTIONS.RDB$FUNCTION_NAME, RDB$FUNCTIONS.RDB$DESCRIPTION, RDB$FUNCTIONS.RDB$MODULE_NAME, RDB$FUNCTIONS.RDB$ENTRYPOINT, RDB$FUNCTIONS.RDB$RETURN_ARGUMENT, RDB$FUNCTION_ARGUMENTS.RDB$ARGUMENT_POSITION, RDB$FUNCTION_ARGUMENTS.RDB$MECHANISM, RDB$FUNCTION_ARGUMENTS.RDB$FIELD_TYPE, RDB$TYPES.RDB$TYPE_NAME, RDB$FUNCTION_ARGUMENTS.RDB$FIELD_LENGTH, RDB$FUNCTION_ARGUMENTS.RDB$FIELD_PRECISION FROM RDB$FUNCTIONS INNER JOIN RDB$FUNCTION_ARGUMENTS ON (RDB$FUNCTIONS.RDB$FUNCTION_NAME = RDB$FUNCTION_ARGUMENTS.RDB$FUNCTION_NAME) INNER JOIN RDB$TYPES ON (RDB$FUNCTION_ARGUMENTS.RDB$FIELD_TYPE = RDB$TYPES.RDB$TYPE) WHERE ( ((RDB$FUNCTIONS.RDB$SYSTEM_FLAG = 0) or (RDB$FUNCTIONS.RDB$SYSTEM_FLAG IS NULL)) and (RDB$TYPES.RDB$FIELD_NAME = 'RDB$FIELD_TYPE') ) ORDER BY RDB$FUNCTIONS.RDB$FUNCTION_NAME, RDB$FUNCTION_ARGUMENTS.RDB$ARGUMENT_POSITION;

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

SELECT RDB$FUNCTIONS.RDB$FUNCTION_NAME, RDB$FUNCTIONS.RDB$DESCRIPTION, RDB$FUNCTIONS.RDB$MODULE_NAME, RDB$FUNCTIONS.RDB$ENTRYPOINT, RDB$FUNCTIONS.RDB$RETURN_ARGUMENT, RDB$FUNCTION_ARGUMENTS.RDB$ARGUMENT_POSITION, RDB$FUNCTION_ARGUMENTS.RDB$MECHANISM, RDB$FUNCTION_ARGUMENTS.RDB$FIELD_TYPE, RDB$TYPES.RDB$TYPE_NAME, RDB$FUNCTION_ARGUMENTS.RDB$FIELD_LENGTH, RDB$FUNCTION_ARGUMENTS.RDB$FIELD_PRECISION FROM RDB$FUNCTIONS INNER JOIN RDB$FUNCTION_ARGUMENTS ON (RDB$FUNCTIONS.RDB$FUNCTION_NAME = RDB$FUNCTION_ARGUMENTS.RDB$FUNCTION_NAME) INNER JOIN RDB$TYPES ON (RDB$FUNCTION_ARGUMENTS.RDB$FIELD_TYPE = RDB$TYPES.RDB$TYPE) WHERE ( ((RDB$FUNCTIONS.RDB$SYSTEM_FLAG = 0) or (RDB$FUNCTIONS.RDB$SYSTEM_FLAG IS NULL)) and (RDB$TYPES.RDB$FIELD_NAME = 'RDB$FIELD_TYPE') and (RDB$FUNCTIONS.RDB$RETURN_ARGUMENT = RDB$FUNCTION_ARGUMENTS.RDB$ARGUMENT_POSITION) ) ORDER BY RDB$FUNCTIONS.RDB$FUNCTION_NAME, RDB$FUNCTION_ARGUMENTS.RDB$ARGUMENT_POSITION;


Здесь же, наоборот, получаем информацию только о входных аргументах функций.

SELECT RDB$FUNCTIONS.RDB$FUNCTION_NAME, RDB$FUNCTIONS.RDB$DESCRIPTION, RDB$FUNCTIONS.RDB$MODULE_NAME, RDB$FUNCTIONS.RDB$ENTRYPOINT, RDB$FUNCTIONS.RDB$RETURN_ARGUMENT, RDB$FUNCTION_ARGUMENTS.RDB$ARGUMENT_POSITION, RDB$FUNCTION_ARGUMENTS.RDB$MECHANISM, RDB$FUNCTION_ARGUMENTS.RDB$FIELD_TYPE, RDB$TYPES.RDB$TYPE_NAME, RDB$FUNCTION_ARGUMENTS.RDB$FIELD_LENGTH, RDB$FUNCTION_ARGUMENTS.RDB$FIELD_PRECISION FROM RDB$FUNCTIONS INNER JOIN RDB$FUNCTION_ARGUMENTS ON (RDB$FUNCTIONS.RDB$FUNCTION_NAME = RDB$FUNCTION_ARGUMENTS.RDB$FUNCTION_NAME) INNER JOIN RDB$TYPES ON (RDB$FUNCTION_ARGUMENTS.RDB$FIELD_TYPE = RDB$TYPES.RDB$TYPE) WHERE ( ((RDB$FUNCTIONS.RDB$SYSTEM_FLAG = 0) or (RDB$FUNCTIONS.RDB$SYSTEM_FLAG IS NULL)) and (RDB$TYPES.RDB$FIELD_NAME = 'RDB$FIELD_TYPE') and (RDB$FUNCTIONS.RDB$RETURN_ARGUMENT <> RDB$FUNCTION_ARGUMENTS.RDB$ARGUMENT_POSITION) ) ORDER BY RDB$FUNCTIONS.RDB$FUNCTION_NAME, RDB$FUNCTION_ARGUMENTS.RDB$ARGUMENT_POSITION;


Содержание раздела