Хранимые функции — различия между версиями

Материал из Викиконспекты
Перейти к: навигация, поиск
м (Добавил отличия в оглавление, чтобы сделать ссылку)
(Добавлено больше текста)
Строка 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''.
+
В теле функции можем указывать оператор ''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). В последнем случае хранимая функция практически не отличима от хранимой процедуры.

Литература