6.4. Хранимые функции
Хранимые функции являются разновидностью хранимых процедур. Они включены в состав программных объектов баз данных с целью наибольшего соответствия языкам программирования, например Си или Паскаль. Как и в этих языках программирования, каждая хранимая функция рассматривается в качестве выражения, формирующего одно единственное значение. Хранимые функции применяются для расширения функциональных возможностей операторов SELECT и ряда других SQL-операторов.
Функции создаются оператором CREATE FUNCTION. Их модификация производится при помощи оператора ALTER FUNCTION. Для разработки функций пользователи должны иметь класс полномочий RESOURCE (см. п. 5.2). В качестве примера представим хранимую процедуру Get_number_absent (см. п. 6.2) в виде хранимой функции Fun_get_num_abs:
//Создание новой функции
CREATE FUNCTION Fun_get_num_abs
/* Функция определяет количество книг, находящихся
на руках у читателя, имеющего читательскую
карточку с номером Par_N_reader. Это количество
возвращается в качестве результата функции. */
(
Par_N_reader SMALLINT
)
RETURNS SMALLINT
BEGIN
DECLARE Count_books SMALLINT;
SELECT COUNT(*) INTO Count_books
FROM Stepanov.Absent
WHERE N_reader = Par_N_reader;
RETURN (count_books);
END
Для проверки работы этой функции следует выполнить следующие SQL-операторы:
//Проверка процедуры Fun_get_num_abs
/* Если переменная уже есть, то
создавать ее заново нельзя */
//CREATE VARIABLE Rez SMALLINT;
/* Вызов функции и присваивание
ее результатов переменной Rez */
SET Rez = Fun_get_num_abs(80);
SELECT Rez
В результате обращения к функции Fun_get_num_abs в переменную Rez запишется значение четыре, точно такое же как после выполнения процедуры Get_number_absent.
Оператор CREATE FUNCTION несколько отличается от оператора CREATE PROCEDURE. Эти отличия состоят в следующем:
- В функциях допустимы только входные формальные параметры (типа IN). В связи с этим при описании формальных параметров не используются служебные слова IN, OUT и INOUT.
- После описания формальных параметров функции должен следовать оператор RETURNS. Данный оператор указывает тип возвращаемого функцией значения.
- В теле функции обязательно должен присутствовать оператор RETURN, который специфицирует возвращаемое функцией значение.
- Функция не может формировать результирующее множество.
Хранимые функции могут вызываться любым пользователем, имеющего для соответствующей функции привилегию EXECUTE. Для предоставления права вызова функций, также как и для процедур, используется оператор GRANT EXECUTE. Чтобы предоставить библиотекарям возможность применения функции fun_get_num_abs необходимо выполнить следующий оператор:
//Установка привилегии EXECUTE библиотекарям
GRANT EXECUTE ON
Fun_get_num_abs TO LIBRARIANS
Опять же, как для процедур, лишение привилегий на использование функций осуществляется оператором REVOKE EXECUTE:
//Лишение библиотекарей привилегии EXECUTE
REVOKE EXECUTE ON
Fun_get_num_abs TO LIBRARIANS
Ранее созданные функции хранятся в базах данных до тех, пока они не удаляются посредством оператора DROP FUNCTION. Для удаления из базы данных функции Fun_get_num_abs необходимо выполнить этот оператор следующим образом:
//Удаление функции
DROP FUNCTION Fun_get_num_abs.
Удаление функции может производить только ее владелец или пользователь с полномочиями класса DBA (см. табл. 7).
Вызов Функции должен осуществляться там, где требуется выражение, формирующее значение. В связи с этим, функции могут непосредственно использоваться в выражениях. Например, они могут применяться в арифметических выражениях, вместо фактических параметров процедур или функций, а также прямо в составе SQL-операторов. Все эти качества позволяют в значительной степени расширить функциональные возможности языка SQL, как средства разработки приложений.
Назад |
Содержание |
Вперед