Табличные функции в SQL


Понятие табличных функций
В SQL:2003 специфицированы табличные функции, т.е. функции, вызываемые из SQL и возвращающих результат «таблицу». Поскольку в SQL нет типа таблица, то фактически результатом табличной функции является мультимножество (типом элементов которого является анонимный строчный тип). Однако к результату табличной функции можно адресовать запросы таким же образом, как и к таблица. В синтаксических конструкциях для определения и вызова табличных функций предусмотрено ключевое слово TABLE.

Внешние табличные функции

CREATE FUNCTION Func1() RETURNS TABLE(CName Char(10), SName Char(10), ONum Integer)
NOT DETERMINISTIC
NO SQL //нет SQL-операторов
LANGUAGE C
EXTERNAL //результаты могут быть неопределенными значениями
PARAMETER STYLE SQL

Внешние табличные функции позволяют запрашивать данные, которые не хранятся в базовых таблицах и являются внешними по отношению к ним (в примере тело функции на С не приведено).

SELECT SName, ONum FROM TABLE(Func1()) AS TT WHERE TT.CName=’Hoffman’

Табличные функции на SQL

CREATE FUNCTION Func2(CName Char(10)) RETURNS TABLE(SName Char(10), ONum Integer)
LANGUAGE SQL
READS SQL DATA //доступ к данным будет только в режиме чтения
DETERMINISTIC //один результат при одних данных
RETURN TABLE (SELECT SName, ONum FROM Orders WHERE Orders.CName=Func2.CName)

Подобные функции иногда называют параметрическими представлениями. Чаще всего табличные функции с ключевым словом TABLE вызываются в разделе FROM оператора выборки, но могут вызываться везде, где может присутствовать ссылка на таблицу.

Табличные функции в SQL Server
Хранимые табличные функции в SQL Server

CREATE FUNCTION <имя функции> ([@<имя параметра> [AS] <тип данных>[(<размер>)] [=<значение по умолчанию>][READONLY],…]) RETURNS TABLE [AS] RETURN [(]<запрос>[)]

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

RETURNS <имя таблицы> TABLE (@<имя параметра> [AS] <тип данных>[(<размер>)],…) [AS] …

Пример:

USE B1
GO
CREATE FUNCTION CustCity(@City VarChar(20)=’San Jose’) RETURNS TABLE AS RETURN
(SELECT CNum, CName, Fating FROM Customer WHERE City=@City) GO
SELECT * FROM CustCity(‘London’);

CNumCNameRating
2001Hoffman100
2008Clemens100

SELECT * FROM CustCity(Default);

CNumCNameRating
2003Liu200
2008Clemens300

Внешние табличные функции в SQL Server

CREATE FUNCTION <имя функции CLR> ([@<имя параметра> [AS] <тип данных>[(<размер>)] [=<значение по умолчанию>],…])
RETURNS TABLE <определение табличных данных в CLR> [ORDER (<определяется порядок сортировки>)] [AS] EXTERNAL NAME <имя метода CLR>


Комментарии запрещены.




Статистика