Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Посібник Мова SQL кредитно-модульний.doc
Скачиваний:
35
Добавлен:
01.05.2015
Размер:
1.25 Mб
Скачать

Користувальницькі функції

Оператор CREATE FUNCTIONдозволяє створювати користувальницькі функції, операторALTER FUNCTION- модифікувати їх, а операторDROP FUNCTION— видаляти. Будь-яке повне ім'я користувальницької функції повинне бути унікальним.

Користувальницька функція здатна приймати різне число параметрів (від 0 до 1024) і повертати як скалярне значення, так і таблицю. Якщо у параметра функції є значення за замовчуванням, то, щоб задати його при викликанні функції, варто ввести ключове слово DEFAULT. Цим параметри користувальницьких функцій відрізняються від параметрів збережених процедур, у яких при відсутності параметра також мається на увазі значення за замовчуванням. Користувальницькі функції не підтримують вихідні параметри.

Типи користувальницьких функцій

Мова програмування Transact-SQL підтримує два типи користувальницьких функцій: скалярні й табличні.

Скалярні функції

Скалярні функції повертають єдине значення, тип якого визначається конструкцією RETURNS. При цьому можна використати всі скалярні типи даних, включаючи bigint і sql_variant.

Тип даних timestamp, користувальницькі й не скалярні типи даних (наприклад, ’таблиця’ або ’курсор’) не підтримуються. Тіло функції в блоціBEGIN...END, містить набір операторів Transact-SQL, які повертають значення функції. Функція здатна повертати значення будь-якого типу, крімtext, ntext, image, cursor і timestamp.

Табличні функції

Табличні функції повертають таблиці. Існують табличні функції двох типів:

  • функції, які підставляються

  • багатооператорні.

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

Тіло багатооператорних функцій, повинно бути в блоці BEGIN...END, складається з операторів Transact-SQL, що виконують формування рядків і розміщення їх і повертає таблицю. Оператори із блокуBEGIN...ENDне повинні робити ніяких побічних ефектів. Побічним ефектом функції називаються будь-які постійні зміни стану ресурсу, область дії якого перебуває за межами функції (наприклад, модифікація таблиці бази даних). Операторам функцій дозволено вносити зміни тільки в локальні об'єкти функції, такі, як локальні курсори й змінні. Наприклад, за допомогою функції не можна модифікувати таблиці бази даних, виконувати операції над курсорами, які не є локальними для функції, розсилати електронну пошту, модифікувати каталог і генерувати результуючий набір, що повертається безпосередньо користувачеві.

Детермінованість функцій

В SQL Server є як детерміновані, так і недетерміновані функції. Детермінованою вважається функція, що повертає однакові результати, якщо її викликають із тим самим набором вхідних параметрів. Недетермінованою називається функція, якщо при її виклику з тим самим набором вхідних параметрів вона може повертати різні результати.

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

Функції конфігурації, курсорів, метаданих, безпеки і системної статистики (а також інші убудовані функції) відносяться до недетермінованих.