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. Эти отличия состоят в следующем:
Хранимые функции могут вызываться любым пользователем, имеющего для соответствующей функции привилегию 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, как средства разработки приложений.
Назад | Содержание | Вперед