Внешние табличные пользовательские функции OLE-DB в DBS
Этот вариант инструкции CREATE FUNCTION регистрирует пользовательскую внешнюю табличную функцию OLE-DB для доступа к данным поставщика OLE-DB. Табличную функцию можно использовать в предложении FROM инструкции SELECT. Эти функции полезны для подключения к источникам реляционных данных, не относящихся к DB2. Во внешних табличных пользовательских функциях OLE-DB можно использовать следующие предложения:
CREATE FUNCTION имя_объекта (имя_параметра тип_данных) [, …]) RETURNS TABLE тип_данных[…]] [SPECIFIC специальное_имя]
[LANGUAGE OLEDB] [EXTERNAL NAME имя_внешней_процедуры] [DETERMINISTIC | NOT DETERMINISTIC] [[NO] EXTERNAL ACTION]
[STATIC DISPATCH] [CALLED ON NULL INPUT |
RETURNS NULL ON NULL INPUT] [CARDINALITY int] блок_кода
В следующем примере регистрируется табличная функция OLE-DB, которая извлекает информацию о заказе, order, из базы данных Microsoft Access с именем Northwind.
CREATE FUNCTION orders ()
RETURNS TABLE (orderid INTEGER, customerid CHAR(5), employeeid INTEGER, orderdate
TIMESTAMP, requireddate TIMESTAMP, shippeddate TIMESTAMP, shipvia INTEGER, freight DEC(19.4))
LANGUAGE OLEDB
EXTERNAL NAME ‘iorders!Provider=Microsoft. Jet, OLEDB. 3. 51;
Data Source=c:sqllibsamplesoledbnwind. mdb’;
Отметьте, что строка соединения определяется во внешнем имени функции. Шаблонные пользовательские функции DB2
Этот вариант инструкции CREATE FUNCTION регистрирует пользовательскую функцию, основанную на другой существующей скалярной или столбцовой функции. С помощью этой инструкции также можно зарегистрировать шаблон функции сервером приложений, который играет роль объединенного сервера (federated server). (Шаблон функции — это частично реализованная функция, в которой нет исполняемого кода, но есть связь с функцией-источником данных. Как только связь устанавливается, пользователь может указывать шаблон функции в запросах к объединенному серверу. Объединенный сервер будет вызывать функцию-источник данных и возвращать значения, соответствующие тем, которые указаны в части RETURNS определения шаблона.) В шаблонных пользовательских функциях можно использовать следующие предложения. CREATE FUNCTION имя_объекта (имя_параметра тип_данных [, …]) RETURNS тип_данных [, …]]
[SOURCE {имя_объекта [входной_аргумент [, …]] |
[SPECIFIC специальное_имя]] [AS TEMPLATE [DETERMINISTIC | NOT DETERMINISTIC]
[[NO] EXTERNAL ACTION]] блок_кода
Например, следующая шаблонная пользовательская функция основывается на скалярной функции report_reader.center, созданной ранее в этом разделе. Следующая функция, называющаяся fn_center, принимает только целочисленные аргументы.
CREATE FUNCTION fn_center (INTEGER, INTEGER) RETURNS FLOAT
SOURCE report_reader, center (INTEGER, FLOAT);
В следующем примере с использованием объединенного сервера (federated server) мы можем вызывать пользовательскую функцию Oracle под названием statistics из схемы scott, которая возвращает статистику по таблице в форме значения с плавающей точкой двойной точности.
CREATE FUNCTION scott.statistics (DOUBLE, DOUBLE) RETURNS DOUBLE AS TEMPLATE DETERMINISTIC NO EXTERNAL ACTION;