Хранимые функции — различия между версиями
Dmitriy (обсуждение | вклад) м (Добавил отличия в оглавление, чтобы сделать ссылку) |
Natallem (обсуждение | вклад) (Добавлено больше текста) |
||
Строка 4: | Строка 4: | ||
== Отличие от хранимых процедур == | == Отличие от хранимых процедур == | ||
− | *Возврат скалярного значения | + | *Возврат скалярного значения, в то время как хранимая процедура возвращает только таблицы |
*Использование в выражениях | *Использование в выражениях | ||
Строка 10: | Строка 10: | ||
===Синтаксис=== | ===Синтаксис=== | ||
− | При создании хранимой функции есть те же параметры, что и у хранимой процедуры, но в отличие от последней, нужно указать возвращаемый тип. | + | При создании хранимой функции есть те же параметры, что и у хранимой процедуры (имя, аргументы, настройки языка, действия с данными и так далее), но в отличие от последней, нужно указать возвращаемый тип. |
<font color = blue>create <font color = red>[<font color = black>aggregate</font>]</font> function</font> | <font color = blue>create <font color = red>[<font color = black>aggregate</font>]</font> function</font> | ||
Строка 17: | Строка 17: | ||
тело</font> | тело</font> | ||
− | В теле функции можем указывать оператор | + | В теле функции можем указывать оператор ''return'', который приводит к возврату значения. Если в теле функции не будет оператора ''return'', то считается, что данная функция возвращает ''null''. |
=== Пример === | === Пример === | ||
<font color = blue>create function add</font><font color = gray>(<font color = black>a int<font color = gray>,</font> b int</font>)</font> returns int | <font color = blue>create function add</font><font color = gray>(<font color = black>a int<font color = gray>,</font> b int</font>)</font> returns int | ||
<font color = blue>return</font> a <font color = gray>+</font> b<font color = gray>;</font> | <font color = blue>return</font> a <font color = gray>+</font> b<font color = gray>;</font> | ||
+ | |||
+ | Простая хранимая функция в примере возвращает целое число и складывает два целых числа. | ||
== Особенности == | == Особенности == | ||
− | * '''Обращение к таблицам.''' Многие СУБД запрещают в функции обращаться к таблицам. | + | * '''Обращение к таблицам.''' Многие СУБД запрещают в функции обращаться к таблицам, что негативно сказывается на возможности применения. |
* '''Возвращаемые значения.''' | * '''Возвращаемые значения.''' | ||
− | ** Поддержка встроенных типов есть всегда | + | ** Поддержка встроенных типов есть всегда (в том числе <code>varchar</code> и прочее) |
− | ** Реже есть поддержка пользовательского типа | + | ** Реже есть поддержка пользовательского типа. Еще реже - таблицы в качестве возвращаемого значения, но есть СУБД, позволяющие получать из функции таблицу целиком, и снаружи обработать ее (например, во <code>from</code>). В последнем случае хранимая функция практически не отличима от хранимой процедуры. |
==Литература== | ==Литература== |
Версия 00:17, 27 декабря 2021
Определение: |
Хранимая функция — фрагмент кода, хранящийся в БД, при исполнении которого может возвращаться как скалярное значение, так и таблицы. |
Содержание
Отличие от хранимых процедур
- Возврат скалярного значения, в то время как хранимая процедура возвращает только таблицы
- Использование в выражениях
Создание
Синтаксис
При создании хранимой функции есть те же параметры, что и у хранимой процедуры (имя, аргументы, настройки языка, действия с данными и так далее), но в отличие от последней, нужно указать возвращаемый тип.
create [aggregate] function имя(параметры) returns тип тело
В теле функции можем указывать оператор return, который приводит к возврату значения. Если в теле функции не будет оператора return, то считается, что данная функция возвращает null.
Пример
create function add(a int, b int) returns int return a + b;
Простая хранимая функция в примере возвращает целое число и складывает два целых числа.
Особенности
- Обращение к таблицам. Многие СУБД запрещают в функции обращаться к таблицам, что негативно сказывается на возможности применения.
- Возвращаемые значения.
- Поддержка встроенных типов есть всегда (в том числе
varchar
и прочее) - Реже есть поддержка пользовательского типа. Еще реже - таблицы в качестве возвращаемого значения, но есть СУБД, позволяющие получать из функции таблицу целиком, и снаружи обработать ее (например, во
from
). В последнем случае хранимая функция практически не отличима от хранимой процедуры.
- Поддержка встроенных типов есть всегда (в том числе
Литература
- Дейт К. Введение в системы баз данных (главы 4 и 17)
- Уидом Д., Ульман Д. Основы реляционных баз данных (раздел 7.4)
- Gulutzan P., Pelzer T. SQL-99 complete, really