Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
О.Б.Д / лекции / 12БД.doc
Скачиваний:
26
Добавлен:
30.05.2020
Размер:
115.71 Кб
Скачать

12. Лекція:

Тема: Функції користувача та вбудовані функції:

Мета: Дати визначення функцій користувача, навести приклади їх створення і використання. Розглянути різні типи функцій. Проаналізувати вбудовані функції язика SQL.

ПЛАН

1 Поняття функції користувача

2 Функції Scalar

3 Функції Inline

4 Функції Multi-statement

5 Вбудовані функції

Математичні функції

Рядкові функції

Функції для роботи з датою і часом

1 Поняття функції користувача

При реалізації на язиці SQL складних алгоритмів, які можуть бути потрібні більше одного разу, відразу постає питання про збереження розробленого коду для подальшого вживання. Цю задачу можна б було реалізувати за допомогою збережених процедур, проте їх архітектура не дозволяє використовувати процедури безпосередньо у виразах, оскільки вони вимагають проміжного привласнення поверненого значення змінної, яка потім і указується у виразі. Природно, подібний метод вживання програмного коду не дуже зручний. Багато розробників вже давно хотіли мати нагоду виклику розроблених алгоритмів безпосередньо у виразах.

Можливість створення призначених для користувача функцій була надана в середовищі MS SQL Server 2000. В інших реалізаціях SQL у розпорядженні користувача є тільки вбудовані функції, які забезпечують виконання найпоширеніших алгоритмів: пошук максимального або мінімального значення і ін.

Функції користувача є самостійними об'єктами бази даних, такі, наприклад, як хзбережені процедури або тригери. Функція користувача розташовується в певній базі даних і доступна тільки в її контексті.

В SQL Server є наступні класи функцій користувача:

  • Scalar – функції повертають звичайне скалярне значення, кожна може включати безліч команд, об'єднуваних в один блок за допомогою конструкції BEGIN...END;

  • Inline – функції містять всього одну команду SELECT і повертають користувачу набір даних у вигляді значення типу даних TABLE ;

  • Multi-statement – функції також повертають користувачу значення типу даних TABLE, що містить набір даних, проте в тілі функції знаходиться безліч команд SQL (INSERT, UPDATE і т.д.). Саме з їх допомогою і формується набір даних, який повинен бути повернений після виконання функції .

Призначені для користувача функції схожі з береженими процедурами, але, на відміну від них, можуть застосовуватися в запитах так само, як і системні вбудовані функції. Призначені для користувача функції, що повертають таблиці, можуть стати альтернативою переглядам. Перегляди обмежені одним виразом SELECT, а призначені для користувача функції здатні включати додаткові вирази, що дозволяє створювати складніші і могутні конструкції.

2 Функції Scalar

Створення і зміна функції даного типу виконується за допомогою команди:

<визначення_скаляр_функції>::=

{CREATE | ALTER } FUNCTION [власник.] ім’я_функції

( [ { @ім’я_параметра скаляр_тип_даних

[=default]}[,...n]])

RETURNS скаляр_тип_даних

[WITH {ENCRYPTION | SCHEMABINDING} [,...n] ]

[AS]

BEGIN

<тіло_функції>

RETURN скаляр_вираз

END

Розглянемо призначення параметрів команди.

Функція може містити один або декілька вхідних параметрів або не містити жодного. Кожний параметр повинен мати унікальне в межах створюваної функції ім'я і починатися з символу " @ ". Після імені указується тип даних параметра. Додатково можна вказати значення, яке автоматично привласнюватиметься параметру (DEFAULT), якщо користувач явно не вказав значення відповідного параметра при виклику функції.

За допомогою конструкції RETURNS скаляр_тип_даних вказується, який тип даних матиме значення, що повертається функцією.

Додаткові параметри, з якими повинна бути створена функція, можуть бути вказані за допомогою ключового слова WITH. Завдяки ключовому слову ENCRYPTION код команди, що використовується для створення функції, буде зашифрований, і ніхто не зможе проглянути його. Ця можливість дозволяє приховати логіку роботи функції. Крім того, в тілі функції може виконуватися звернення до різних об'єктів бази даних, а тому зміна або видалення відповідних об'єктів може привести до порушення роботи функції. Щоб уникнути цього, вимагається заборонити внесення змін, вказавши при створенні цієї функції ключове слово SCHEMABINDING.

Між ключовими словами BEGIN...END указується набір команд, вони і будуть тілом функції.

Коли в ході виконання коду функції зустрічається ключове слово RETURN, виконання функції завершується і як результат її обчислення повертається значення, вказане безпосередньо після слова RETURN. Відзначимо, що в тілі функції дозволяється використовування безлічі команд RETURN, які можуть повертати різні значення. Як значення, що повертається, допускаються як звичайні константи, так і складні вирази. Єдина умова – тип даних значення, що повертається, повинен співпадати з типом даних, вказаним після ключового слова RETURNS.

Приклад 12.1. Створити і застосувати функцію скалярного типу для обчислення сумарної кількості товару, що поступив за певну дату. Власник функції – користувач з ім'ям user1.

CREATE FUNCTION user1.sales(@data DATETIME)

RETURNS INT

AS

BEGIN

DECLARE @c INT

SET @c=(SELECT SUM(кількість)

FROM Операція

WHERE дата=@data)

RETURN (@c)

END

Приклад 12.1. Створення функції скалярного типу для обчислення сумарної кількості товару, що поступив за певну дату.

Як вхідний параметр використовується дата. Функція повертає значення цілого типу, одержане з оператора SELECT шляхом підсумовування кількості товару з таблиці Операція. Умовою відбору записів для підсумовування є рівність дати операції значенню вхідного параметра функції.

Проілюструємо звернення до функції користувача: визначимо кількість товару, що поступив за 02.11.01:

DECLARE @kol INT

SET @kol=user1.sales ('02.11.01')

SELECT @kol

Соседние файлы в папке лекции