Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
10
Добавлен:
15.04.2015
Размер:
3.4 Mб
Скачать

Созданная функция может вызываться с помощью оператора SELECT, например:

SELECT * FROM GetPrice()

или

SELECT * FROM GetPrice() WHERE Количество=1

(в последнем случае вывод результатов работы функции, ограничивается предложением WHERE).

73

Пример 3. Создание и применение функции табличного типа для определения двух

наименований товара с наибольшим остатком.

CREATE FUNCTION user1.itog()

RETURNS TABLE

AS

RETURN (SELECT TOP 2 Товар.Название FROM Товар INNER JOIN Склад

ON Товар.КодТовара=Склад.КодТовара ORDER BY Склад.Остаток DESC)

74

Использовать функцию для получения

двух наименований товара с наибольшим

остатком можно следующим образом:

SELECT Название FROM user1.itog()

75

8.2.3. Табличные функции с множеством инструкций (функции Multi-statement)

Данные функции, как и функции Inline, возвращают значение табличного типа.

Но в отличие от функций Inline, при создании

функции Multi-statement необходимо явно задать структуру возвращаемого значения. Эта структура указывается сразу после ключевого слова TABLE и, таким образом, является частью определения возвращаемого типа данных. При этом используется блок операторов BEGIN76– END.

Общий синтаксис функции Multistatement:

CREATE FUNCTION [имя_схемы.] имя_функции ( [ { @имя_параметра [ AS ] [имя_схемы.]

тип_данных_параметра [ = значение_параметра_по_умолчанию ] } [, …n] ] )

RETURNS @возвращаемая_переменная

TABLE <определение_табличного_типа_ данных> [ WITH <function_option> [, …n] ]

[ AS ]

BEGIN

тело_функции

 

RETURN

 

END

77

Элементы синтаксиса соответствуют приведенным для скалярных функций.

Синтаксис конструкции

<определение_табличного_типа_данных> :

<определение_табличного_типа_ данных> ::= ({<определение_столбца> | <ограничение_таблицы>} [, …n] )

где элементы <определение_столбца>, <ограничение_таблицы> полностью соответствуют аналогичным элементам,

используемым при создании таблиц с помощью

команды CREATE TABLE.

78

 

Набор данных, возвращаемых функцией,

должен формироваться с помощью команды

INSERT, выполняемой в теле функции.

В теле функции допускаются различные конструкции T-SQL, контролирующие значения, размещаемые в наборе записей.

При работе с командой INSERT явно указывается имя объекта, в который вставляются строки. Это имя указывается с помощью табличной переменной с именем возвращаемая_переменная.

79

Работа функции завершается при наличии ошибок выполнения или когда в коде

встречается ключевое слово RETURN.

В отличие от скалярных функций при

использовании команды RETURN не нужно

указывать значение, которое должно быть

возвращено. Сервер автоматически возвратит

набор данных табличного типа, имя и структура

которого указана после ключевого слова

RETURNS.

80

Функции Multi-statement сочетают свойства:

скалярных функций - содержать сложный программный код;

функций Inline - возвращать табличный результат.

Эти функции: 1) создают табличную переменную и заполняют ее в теле функции; 2) возвращают таблицу- результат, которая может использоваться в инструкциях SELECT.

Преимущество функций Multi-statement - возможность формировать результат с помощью нескольких инструкций SQL (пакета инструкций), а затем напрямую использовать этот набор данных в

инструкциях SELECT.

81

Пример 1. Функция Multi-statement, которая выводит сведения о студентах (фамилия, имя) по номеру группы.

CREATE FUNCTION Students(@Gr NCHAR(6)) RETURNS @report

TABLE(Фамилия NCHAR(20), Имя NCHAR(20))

AS

BEGIN

INSERT INTO @report

SELECT Фамилия, Имя FROM Студенты WHERE (Студенты.Группа=@Gr)

RETURN END

Пример вызова этой функции:

SELECT * FROM Students('ИТ-31')82

Соседние файлы в папке ИПК_Занятия_ОПБД