Logo Host-telecom.com — профессиональный хостинг в Европе! Море(!) аналитической информации!
IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware
Wildcard сертификаты от $74,97 в год.

Дешевые ssl сертификаты для домена

Sectigo сертификаты от $7,67 в год.

хостинг Украина Виртуальный хостинг для сайта от $4,87

Регистрация домена от $2 в год

Партнерская программа – $20 за клиента

VPS с гибкой конфигурацией: за 1€

Мощные выделенные сервера: от 25€

Собственный Дата-Центр
Поддержка 24/7

Бесплатный конструктор сайтов и Landing Page

Хостинг с DDoS защитой от 2.5$ + Бесплатный SSL и Домен

SSD VPS в Нидерландах под различные задачи от 2.6$

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

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

 

ATLEX Выделенные серверы: в Европе / в России.

Виртуальные серверы: в Европе / в России.

Партнерская программа

Ваш сайт в 8 раз быстрее конкурентов. Хостинг от $2.95

VPS: SSD, KVM, бесплатные бэкапы и администрирование

Все необходимое для вашего сайта и лучшая техподдержка 24/7

хостинг сайтов ГиперХост — хостинг сайтов который Вы искали.

Виртуальный хостинг, Аренда VPS серверов, рация доменных имен, SSL сертификаты

💰 Самые низкие цены на домены

🔒 Отличный хостинг на SSD c бесплатными SSL

💻 Огромнейший выбор dedicated выделенных серверов

Виртуальные VPS серверы в РФ и ЕС

Dedicated серверы в РФ и ЕС

По промокоду CITFORUM скидка 30% на заказ VPS\VDS

VDS хостинг Облачный сервер в Нидерландах и Украине

Аренда виртуального сервера от $7.91

Партнёрская программа
$20 за клиента

Новости мира IT:

Архив новостей

Последние комментарии:

IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware

Информация для рекламодателей PR-акции, размещение рекламы — adv@citforum.ru,
тел. +7 495 7861149
Пресс-релизы — pr@citforum.ru
Обратная связь
Информация для авторов
Rambler's Top100 TopList liveinternet.ru: показано число просмотров за 24 часа, посетителей за 24 часа и за сегодня This Web server launched on February 24, 1997
Copyright © 1997-2000 CIT, © 2001-2019 CIT Forum
Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав. Подробнее...