
- •ЛЕКЦІЯ 12
- •План
- •Поняття функції користувача
- •Класи функцій користувача
- •Функції Scalar
- •Створити і застосувати функцію скалярного типу для обчислення сумарної кількості товару, що поступив
- •Функції Inline
- •Створити і застосувати функцію табличного типу для визначення двох найменувань товару з найбільшим
- •Функції Multi-statement
- •Підготовка даних
- •Створити і застосувати функцію (типу multi- statement), яка для деякого співробітника виводить список
- •Застосуємо створену функцію для визначення списку підлеглих співробітника ‘b’
- •Список підлеглих співробітника ‘a’
- •Вбудовані функції
- •Математичні функції
- •Використовування функції округлення до одного знака після коми для розрахунку податку
- •Рядкові функції
- •Функції для роботи з датою і часом

ЛЕКЦІЯ 12
ТЕМА: Функції користувача та вбудовані функції

План
1 Поняття функції користувача
2 Функції Scalar
3 Функції Inline
4 Функції Multi-statement
5 Вбудовані функції
Математичні функції Рядкові функції
Функції для роботи з датою і часом

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

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

Функції Scalar
<визначення_скаляр_функції>::=
{CREATE | ALTER } FUNCTION [власник.] ім’я_функції ( [ { @ім’я_параметра скаляр_тип_даних
[ = default ] } [,...n] ] ) RETURNS скаляр_тип_даних
[WITH {ENCRYPTION | SCHEMABINDING} [,...n] ] [AS]
BEGIN <тіло_функції>
RETURN скаляр_вираз END

Створити і застосувати функцію скалярного типу для обчислення сумарної кількості товару, що поступив за певну дату. Власник функції – користувач з ім'ям user1.
CREATE FUNCTION user1.sales(@data DATETIME) RETURNS INT
AS BEGIN
DECLARE @c INT
SET @c=(SELECT SUM(кількість) FROM Операція
WHERE дата=@data) RETURN (@c)
END

Функції Inline
<визначення_табл_функції>::= {CREATE | ALTER } FUNCTION [власник.]
ім’я_функції ( [ { @ім’я_параметра скаляр_тип_даних
[ = default ] } [,...n] ] ) RETURNS TABLE
[ WITH {ENCRYPTION | SCHEMABINDING} [,...n] ]
[AS]
RETURN [(] SELECT_оператор [)]

Створити і застосувати функцію табличного типу для визначення двох найменувань товару з найбільшим
залишком
CREATE FUNCTION user1.itog() RETURNS TABLE
AS
RETURN (SELECT TOP 2 Товар.Назва
FROM Товар INNER JOIN Склад ON Товар.КодТовара=Склад.КодТовара
ORDER Склад.Залишок DESC)

Функції Multi-statement
<визначення_мульти_функції>::= {CREATE | ALTER }FUNCTION [власник.]
ім’я_функції ( [ { @ім’я_параметра скаляр_тип_даних [=default]}[,...n]])
RETURNS @ім’я_параметра TABLE <визначення_таблиці>
[WITH {ENCRYPTION | SCHEMABINDING} [,...n] ] [AS]
BEGIN <тіло_функції> RETURN
END

Підготовка даних
CREATE TABLE emp_mgr
(emp CHAR(2) PRIMARY KEY -- співробітник
mgr CHAR(2)) -- керівник
emp mgr
аNULL
bа
са
dа
ef
fb
gb
i с
кd