Создание и выполнение функций, созданных пользователем

Оценить
(0 голоса)

UDF создаются при помощи оператора create function, который имеет следующий синтаксис:

create function  [schema_name.] function_name [({Qparam }  type [= default}) {,   ...} returns  {scalar_type | {^variable]  table} [with  [encryption |   schemabinding} [as]   {block I return  (select_stacement)}

Здесь schema_name- имя схемы, которой назначено владение созданной UDF; function_name- имя новой функции; Qparam- имя входного параметра, a type задает его тип данных. Параметрами являются значения, передаваемые вызвавшими программами для UDF, они используются в функции. Опция default задает необязательное значение по умолчанию для соответствующего параметра. (Значением по умолчанию может быть также пустое значение null.)

Предложение returns задает тип данных значения, возвращаемого UDF. Это может быть любой стандартный тип данных, поддерживаемый системой базы данных, включая тип данных table. (Только одним стандартным типом данных, который вы не можете здесь использовать, является тип данных timestamp.)

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

Опция with encription кодирует информацию в системном каталоге, который содержит текст оператора create function. В этом случае вы не можете просматривать текст, использованный для создания этой функции. (Используйте эту опцию для повышения защищенности вашей системы базы данных.)

Альтернативное предложение with schemabinding связывает UDF с объектами базы данных, на которые она ссылается. Любая попытка изменения структуры объекта базы данных, на который ссылается данная функция, оканчивается неудачей. (Связывание функции с объектами базы данных, на которые она ссылается, может быть удалено только в том случае, когда функция изменяется, так что в этом случае опция schemabinding больше не действует).

Объекты базы данных, на которые ссылается функция, должны соответствовать следующим условиям, если  вы хотите использовать предложение schemabinding при создании этой функции

♦ все представления и UDF, на которые ссылается функция, должны быть ограничены схемой;

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

block является блоком begin/end, который содержит реализацию функции. Последним оператором блока должен быть оператор return с аргументом. (Значение аргумента - это значение, возвращаемое данной функцией.) В теле блока begin/end допустимы только следующие операторы:

♦ операторы назначения, такие как set;

♦ операторы управления потоком выполнения, такие как while и if;

♦ операторы declare, определяющие локальные переменные данных;

♦ операторы select, содержащие списки выбора с выражениями, которые присваиваются в качестве значений переменным, являющимся локальными в этой функции;

♦ операторы insert, update и delete, изменяющие переменные типа данных table, которые являются локальными в этой функции.

По умолчанию только участники фиксированной серверной роли sysadmin, а также участники фиксированных ролей базы данных db_owner и db_ddladmin могут использовать оператор create function. Однако участники этих ролей могут назначать подобные привилегии другим пользователям при использовании оператора grant create function.

В примере 8.15 показано создание функции compute_cost.

 

Создание и выполнение функций, созданных пользователем

 

Создание и выполнение функций, созданных пользователем

 

Функция computecost вычисляет дополнительные затраты, которые появляются, если увеличиваются бюджеты проектов. Входная переменная @percent задает процент увеличения бюджетов. Блок begin/end объявляет две локальные переменные: @additionai_cost и @sum_budget. Затем функция присваивает переменной @sum_budget сумму всех бюджетов, используя специальную форму оператора select. После этого функция вычисляет общие дополнительные затраты и возвращает это значение с помощью оператора return.


Вызов функций, определенных пользователем
Тип данных TABLE
Табличные параметры
Табличные функции и оператор APPLY
Изменение структуры UDF

Добавить комментарий


Защитный код
Обновить

© 2018 www.serversql.ru. Все права защищены.