Определение функций Multi-statementтакже практически полностью аналогично определению функций scalar и inline, рассмотренных ранее.
Но есть и отличия:
1. Первое отличие связано с тем, что здесь необходимо
a.в отличие от функций inline и scalar - указать имя локальной переменной типа TABLE, в которой будет возвращен результат выполнения функции;
b.определять тип возвращаемого значения;
c.явно определить набор столбцов, которые будут применяться для хранения полученных данных.
В этих функциях можно дополнительно определять индексы, ограничения целостности и т. д.
2. Второе отличие связано с завершением работы функции. Завершение работы функции происходит при выполнении команды return, однако не требуется указание значения, которое будет возвращено как результат выполнения функции. Всегда возвращается содержимое переменной типа TABLE, указанной после ключевого слова returns.
Может возникнуть необходимость внести в уже созданную функцию некоторые изменения. Для этого вы можете использовать команду alter function.
Параметры и синтаксис команды alter function аналогичны команде create function, требуется лишь заменить слово create на alter.
Пример 8. Команда обновления функции:
ALTER FUNCTION MyFunc ( @Char char, @n int)
SELECT Фамилия, Имя, Отчество, Город, Телефон
FROM Клиенты INNER JOINТелефоны_клиентов
ONКлиенты.ID_клиента = Телефоны_клиентов.Клиент
WHERE LEFT (Фамилия, 1) = @Char AND LEN(Фамилия)<=@n
Для удаления функции используется команда drop function, имеющая синтаксис:
DROP FUNCTION {[имя_схемы. ] имя_функции } [, ...n]
С помощью одной команды можно удалить множество функций, просто перечислив их имена через запятую.
Пример использования команды:
DROP FUNCTION MyFunc, MyFirstFunction
Разработать и применить следующие функции пользователя:
1. скалярную функцию, определяющую общий объем поставок (количество_ед_товара) заданной фирмы-поставщика.
2. скалярную функцию, определяющую доход от продаж для заданной категории товаров.
3. скалярную функцию, возвращающую список из 10 товаров, принесших самый большой доход за последний год.
5. Inline-функцию, выводящую список клиентов, у которых номера телефонов содержат код 8(495) или 8(499).
6. Multi-statement или Inline – функцию, вычисляющую для каждого товара среднюю цену продаж и из таблицыПерсонал выводит фамилии продавцов, у которых имеются сделки с ценой продажи ниже средней.
7. Разработать собственную Multi-statement функцию. Привести пример ее применения.