Хранимые функции — различия между версиями
Natallem (обсуждение | вклад) (Добавление статьи по теме "Хранимые функции" для курса "Базы данных".) |
м (rollbackEdits.php mass rollback) |
||
(не показаны 3 промежуточные версии 3 участников) | |||
Строка 3: | Строка 3: | ||
'''Хранимая функция''' — фрагмент кода, хранящийся в БД, при исполнении которого может возвращаться как скалярное значение, так и таблицы.}} | '''Хранимая функция''' — фрагмент кода, хранящийся в БД, при исполнении которого может возвращаться как скалярное значение, так и таблицы.}} | ||
− | + | == Отличие от хранимых процедур == | |
− | + | *Возврат скалярного значения, в то время как хранимая процедура возвращает только таблицы | |
− | + | *Использование в выражениях | |
== Создание == | == Создание == | ||
===Синтаксис=== | ===Синтаксис=== | ||
− | При создании хранимой функции есть те же параметры, что и у хранимой процедуры, но в отличие от последней, нужно указать возвращаемый тип. | + | При создании хранимой функции есть те же параметры, что и у хранимой процедуры (имя, аргументы, настройки языка, действия с данными и так далее), но в отличие от последней, нужно указать возвращаемый тип. |
<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>). В последнем случае хранимая функция практически не отличима от хранимой процедуры. |
==Литература== | ==Литература== |
Текущая версия на 19:32, 4 сентября 2022
Определение: |
Хранимая функция — фрагмент кода, хранящийся в БД, при исполнении которого может возвращаться как скалярное значение, так и таблицы. |
Содержание
Отличие от хранимых процедур
- Возврат скалярного значения, в то время как хранимая процедура возвращает только таблицы
- Использование в выражениях
Создание
Синтаксис
При создании хранимой функции есть те же параметры, что и у хранимой процедуры (имя, аргументы, настройки языка, действия с данными и так далее), но в отличие от последней, нужно указать возвращаемый тип.
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