InfoCity
InfoCity - виртуальный город компьютерной документации
Реклама на сайте


Крепеж для кабеля цена

Крепления для силовых кабелей, кабеленесущие системы. Своё производство

fortisflex.ru






Размещение сквозной ссылки

 

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, как средства разработки приложений.

[Назад][Содержание][Вперед]


Реклама на InfoCity

Яндекс цитирования



Финансы: форекс для тебя








1999-2009 © InfoCity.kiev.ua