Мониторинг обменных курсов валют
18c0693f

Внешние функции хранимых процедур



Хранимые процедуры позволяют объединить большое количество операций над базой данных
непосредственно с базой данных. Это обеспечивает возможности расширения функциональности
наряду с большой гибкостью. Дополнительно, хранимые процедуры имеют следующие
преимущества:


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

В случае SQLBase процедурным языком является SAL. Однако, как указывалось выше, язык
хранимых процедур SQLBase все еще является подмножеством полного языка SAL, имеющегося в
SQLWindows. Кроме того, многие пользователи SQLBase хотели бы иметь возможность создавать
собственные процедуры, не будучи привязанными к какому-либо конкретному языку.

Естественно, одним из способов расширения функциональности хранимых процедур SQLBase
является расширение используемого подмножества языка SAL. Такой путь, однако, не дает
возможности пользователям гибко добавлять компоненты и собственные функции для реализации
дополнительной функциональности существующих систем. Поэтому процесс придания хранимым
процедурам SQLBase большей "открытости" проводится по двум направлениям:


Первым шагом на этом пути является поддержка в SQLBase нового типа объектов базы данных,
называемого внешней функцией (External Function).

Внешняя функция - это любая пользовательская функция, которая располагается в отдельной
библиотеке (Dynamic Link Library или DLL для платформы Windows) и может быть динамически

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

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

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

Применение внешних функций дает пользователям SQLBase следующие преимущества:


Внешняя функция является новым объектом схемы базы данных SQLBase.


Она создается с
помощью команды CREATE EXTERNAL FUNCTION. Имя функции, ее физическое положение и
интерфейс (параметры и их типы данных, возвращаемые данные и пр.) передаются в этой команде.
Данная информация хранится в системном каталоге в специальных таблицах. Ниже приведен
пример описания внешней функции.

CREATE EXTERNAL FUNCTION MyFunc
PARAMETERS (Number: INT)
RETURNS (BOOLEAN: WORD)
DESCRIPTION 'Sample External Function Declaration'
LIBRARY MYLIB.DLL
EXPORT ORDINAL 2
EXECUTE IN SAME THREAD
Типы данных для параметров функции и возвращаемого значения состоят из двух частей. Сначала
описывается "внутренний формат", соответствующий стандартным типам данных SAL. Могут
быть использованы все типы данных SAL, которые поддерживаются хранимыми процедурами (см.
выше). "Внешний формат", который следует за внутренним, описывает один из стандартных
форматов C, который служит для передачи данных во внешнюю функцию.

Предложение EXECUTE IN описывает как SQLBase будет загружать динамическую библиотеку и
в каком контексте с точки зрения сервера базы данных будет выполняться внешняя функция. Это, в
свою очередь, определяет тип операций, которые могут осуществляться внутри внешнего
кода.

Можно предложить много различных путей использования механизма внешних функций. Ниже
приведен ряд примерных сценариев.


Многие ведущие производители СУБД включают поддержку вызова внешних функций из серверов
баз данных. Некоторые из них поддерживают только вызовы внешних функций с помощью
расширений процедурных языков ( в качестве примеров можно привести Microsoft SQLServer для
NT и Sybase). Другие допускают вызов функций также из SQL запросов.К таким система
относятся Oracle 7 и Rdb. В последующих версиях SQLBase. фирма Gupta планирует реализовать
несколько механизмов вызова внешних функций, включая их использование в выражениях SQL
запросов (сейчас в этих целях используются встроенные функции SQLBase).






Самый выгодный курс обмена валюты