Ћекции.ќрг


ѕоиск:




 атегории:

јстрономи€
Ѕиологи€
√еографи€
ƒругие €зыки
»нтернет
»нформатика
»стори€
 ультура
Ћитература
Ћогика
ћатематика
ћедицина
ћеханика
ќхрана труда
ѕедагогика
ѕолитика
ѕраво
ѕсихологи€
–елиги€
–иторика
—оциологи€
—порт
—троительство
“ехнологи€
“ранспорт
‘изика
‘илософи€
‘инансы
’ими€
Ёкологи€
Ёкономика
Ёлектроника

 

 

 

 


“ипы определ€емых пользователем функции




Ћюба€ определ€ема€ пользователем функци€ состоит из двух частей: заголовка и текста. ‘ункци€ принимает ноль и более параметров и возвращает либо скал€рное значение, либо таблицу.

«аголовок определ€ет:

Ј им€ функции с необ€зательным именем схемы или владельца;

Ј им€ и тип данных параметров функции;

Ј тип данных возвращаемого значени€ и необ€зательное им€;

“екст определ€ет действие или логику, которую выполн€ет функци€, и может содержать одну или несколько инструкций Transact-SQL, реализующих логику функции.

ѕользовательские функции MS SQL Server подраздел€ютс€ на 3 категории:

Ј —кал€рные функции

Ј ¬озвращающие табличное значение функции

Ј ¬строенные функции—кал€рные функции

ѕользовательские скал€рные функции возвращают одно значение типа данных, заданного в предложении RETURNS. ¬строенна€ скал€рна€ функци€ не имеет тела, скал€рное значение €вл€етс€ результатом одной инструкции. —кал€рна€ функци€ из нескольких инструкций имеет тело, ограниченное блоком BEGIN...END, и содержит последовательность инструкций Transact-SQL, возвращающих одно значение. “акие функции могут возвращать любые типы данных, кроме text, ntext, image, cursor и timestamp.

 

CREATE FUNCTION function_name

(

[ { @parameter_name [ AS ] parameter_data_type

[ = default ] }

[,...n ]

]

)

RETURNS return_data_type

[ WITH [ ENCRYPTION ] [ SCHEMABINDING ] [ EXECUTE AS Clause ]]

[ AS ]

BEGIN

function_body

RETURN scalar_expression

END

 

function _ name

»м€ пользовательской функции. —кобки после имени функции об€зательны даже при отсутствии параметров

@ parameter_name

ѕараметр пользовательской функции. ћожет быть объ€влен один или несколько параметров.

ƒл€ функций допускаетс€ не более 1 024 параметров. ѕри выполнении функции значение каждого из объ€вленных параметров должно быть указано пользователем, если дл€ этого параметра не определено значение по умолчанию.

»м€ параметра всегда должно начинатьс€ со знака @. ѕараметры локальны в пределах функции, то есть в разных функци€х могут быть использованы одинаковые имена параметров. јргументы могут использоватьс€ только вместо констант. ќни не могут использоватьс€ вместо имен таблиц, имен столбцов или имен других объектов базы данных.

Parameter_data_type

“ип данных параметра. ƒл€ параметров функций Transact-SQL допустимы любые типы данных за исключением типа данных timestamp, нескал€рные типы cursor и table также не могут быть указаны в качестве типов данных параметров.

[ = default ]

«начение параметра по умолчанию. ≈сли определено значение default, функци€ выполн€етс€ даже в том случае, если дл€ данного параметра значение не указано.

≈сли параметр функции имеет значение по умолчанию, то дл€ него должно быть указано ключевое слово DEFAULT дл€ получени€ функцией значени€ по умолчанию. ѕрименение ключевого слова DEFAULT следует отличать от использовани€ аргументов со значени€ми по умолчанию в хранимых процедурах, когда не указанный аргумент не€вно принимает значение по умолчанию.

return_data_type

“ип возвращаемого значени€ скал€рной пользовательской функции. ƒл€ возвращаемых значений функций Transact-SQL допустимы любые типы данных за исключением типа данных timestamp, нескал€рные типы cursor и table также не могут быть указаны в качестве типов данных параметров.

ENCRYPTION

”казывает, что компонент Database Engine преобразует исходный текст инструкции CREATE FUNCTION в скрытый формат. ѕользователи, не имеющие доступа к системным таблицам или файлам баз данных, не смогут получить скрытый текст.

SCHEMABINDING

”казывает, что функци€ прив€зана к объектам базы данных, которые содержат ссылки на нее. ≈сли аргумент SCHEMABINDING указан, нельз€ изменить базовые объекты таким способом, который может повли€ть на определение функции. —начала нужно изменить или удалить само определение функции, чтобы удалить зависимости от объекта, который требуетс€ изменить.

ѕрив€зка функции к объектам, на которые она ссылаетс€, удал€етс€ только в следующих случа€х:

Ј ѕри удалении функции.

Ј ѕри изменении функции инструкцией ALTER, если не указан параметр SCHEMABINDING.

EXECUTE AS

ќпредел€ет контекст безопасности, в котором должна быть выполнена функци€, т.е. какую учетную запись компонент Database Engine использует при проверке разрешений на объекты, на которые ссылаетс€ функци€. Ёто повышает гибкость и безопасность управлени€ разрешени€ми на цепочки владени€ между пользовательскими функци€ми и объектами, на которые они ссылаютс€.

ѕользовател€м необходимо будет предоставл€ть только разрешени€ на саму функцию, без выдачи €вных разрешений на объекты, на которые она ссылаетс€. “олько пользователь, от имени которого выполн€етс€ модуль, должен будет иметь разрешени€ на объекты, к которым этот модуль обращаетс€.

ƒопустимые значени€ EXECUTE AS { CALLER | SELF | OWNER | 'user_name' }.

Function_body

”казывает серию инструкций Transact-SQL, котора€ в совокупности не вызывает побочных эффектов вроде изменени€ содержимого таблиц и формирует возвращаемое значение функции.

 

ƒл€ скал€рных функций аргумент function_body представл€ет собой серию инструкций Transact-SQL, которые в совокупности вычисл€ют скал€рное значение.

scalar_expression

”казывает скал€рное значение, возвращаемое скал€рной функцией.

ѕример:

—ледующий пример демонстрирует создание скал€рной функции из нескольких инструкций. ‘ункци€ имеет один входной параметр ProductCategoryID и возвращает одно значение Ц максимальную цену товара указанной категории.

 

CREATE FUNCTION getMaxPrice (@ProductCategoryID int)

RETURNS int

AS

BEGIN

DECLARE @ret int;

SELECT @ret = MAX(Price)

FROM Product

WHERE ProductCategoryID = @ProductCategoryID

 

IF (@ret IS NULL)

SET @ret = 0;

RETURN @ret;

END;

 

--»спользование созданной функции

SELECT ProductCategoryName, getMaxPrice (ProductCategoryID) AS MaxPrice

FROM ProductCategory

WHERE ProductCategoryID = 1;





ѕоделитьс€ с друзь€ми:


ƒата добавлени€: 2016-11-22; ћы поможем в написании ваших работ!; просмотров: 409 | Ќарушение авторских прав


ѕоиск на сайте:

Ћучшие изречени€:

—лабые люди всю жизнь стараютс€ быть не хуже других. —ильным во что бы то ни стало нужно стать лучше всех. © Ѕорис јкунин
==> читать все изречени€...

479 - | 457 -


© 2015-2023 lektsii.org -  онтакты - ѕоследнее добавление

√ен: 0.009 с.