Мир InterBase


Создание собственных функций - часть 2



DECLARE EXTERNAL FUNCTION name [datatype | CSTRING (int)

[, datatype | CSTRING (int) ...] ]

RETURNS (datatype [BY VALUE] | CSTRING (int)} [FREE_IT] 

ENTRY_POINT 'entryname' 

MODULE_NAME ' modulename';


Параметр name - это имя пользовательской функции внутри базы данных. Он не обязательно должен совпадать с реальным названием функции в DLL.

Параметр datatype определяет тип параметров. На параметры накладываются следующие ограничения:

  • все параметры передаются по ссылке;

  • выходной параметр (значение функции) может возвращаться по значению;

  • параметры не могут быть массивами.

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

Параметр FREE_IT указывает InterBase, что после выполнения функции необходимо автоматически освободить память, выделенную для параметров. Очевидно, данная опция нужна только в том случае, если наша библиотека сама мм делила память под какие-либо параметры функции.

В параметре entryname необходимо указывать название функции в DLL, ко торую мы собственно и хотим декларировать как пользовательскую функцию.

В параметре modulename необходимо указать название файла DLL, в котором находится декларируемая функция пользователя.

Стоит заметить, что параметры entryname и modulename регистрочувствительные.

Таким образом, чтобы добавить нашу функцию в базу данных, нам необходимо выполнить следующую команду:


DECLARE EXTERNAL FUNCTION USTRUPPERCASE 

cstring(254)

RETURNS cstnng(254) FREE_IT 

ENTRY_POINT 'StrUpperCase' MODULE_NAME 'TestUDF.dll'


После этого мы сможем использовать новую функцию USTRUPPERCASE в любом SQL-запросе. Например, мы можем проверить, как работает функция на следующем запросе:


SELECT USTRUPPERCASE(DEPARTMENT) FROM DEPARTMENT


Запрос вернет названия отделов из таблицы DEPARTMENT:



Рис 1.5. Результат использования UDF USTRUPPERCASE




Начало  Назад  Вперед