![]() |
Модераторы: LSD |
![]() ![]() ![]() |
|
Pakshin A. S. |
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 5056 Регистрация: 16.2.2003 Репутация: нет Всего: 61 |
Хранимая процедура представляет собой программу, расположенную на сервере и вызываемую из приложения клиента. Использование этих объектов увеличивает скорость доступа к БД по следующим причинам:
1) вместо текста запроса, который может быть достаточно длинным, серверу передается по сети относительно короткие обращения к хранимой процедуре; 2) хранимая процедура, в отличие от запроса, не требует предварительной синтаксической проверки. Еще одним преимуществом при обращении к хранимым процедурам является то, что, будучи общими, для всех приложений-клиентов, они реализуют единые для них правила работы с БД. СОЗДАНИЕ И ИЗМЕНЕНИЕ ХРАНИМОЙ ПРОЦЕДУРЫ Хранимая процедура является оператором.
Список параметров выглядит так:
При использовании параметра в выражениях тела процедуры перед его именем нужно указывать знак «:». Тело процедуры состоит из двух частей – описательной и исполнительной.
В теле процедуры должен содержаться как минимум один параметр. Созданную процедуру можно удалить при помощи следующего оператора:
Изменение процедуры выполняется оператором ALTER PROCEDURE, имеющим тот же формат, что и оператор CREATE PROCEDURE. ЯЗЫК ХРАНИМЫХ ПРОЦЕДУР Рассмотрим кратко основные составляющие языка хранимых процедур. В язык хранимых процедур включены операторы: 1) объявления переменных; 2) присваивания; 3) условные; 4) составные; 5) цикла; 6) выбора записи; 7) выбора нескольких записей; 8) возврата значений; 9) выхода из процедуры; 10) вызова процедуры: 11) посылка сообщения; Операторы должны заканчивать точкой с запятой, кроме составного оператора. Объявление переменных:
Тип переменной совпадает с типом столбцов базы данных. Пример:
Оператор присваивания имеет следующий вид:
Пример:
Условный оператор имеет следующий формат:
Соответственно оба оператора могут быть составными и иметь следующий вид:
Пример:
Оператор цикла (повтора) имеет следующий формат:
Пример:
Оператор выбора записи представляет собой оператор SELECT, который возвращает одну строку, поэтому его называют также оператором выбора строки. Значение столбцов возвращаемой строки присваиваются указанным переменным или параметрам. Пример использования:
Оператор выбора нескольких записей также представляет собой оператор SELECT, способный возвращать несколько записей:
Пример:
Часто после слова DO указывается оператор SUSPEND; возврата значений, который передает в вызывающее приложение или хранимую процедуру значения выходных параметров. Пример:
Для немедленного выхода из процедуры используется оператор выхода:
Из процедуры можно вызвать так же другую процедуру при помощи оператора EXECUTE:
Пример:
Для общения с приложением можно использовать посылку сообщений оператором POST_EVENT:
ВЫЗОВ ХРАНИМОЙ ПРОЦЕДУРЫ ДЕЙСТВИЯ
ТРИГГЕР Триггер представляет собой процедуру, которая находится на сервере БД и вызывается автоматически при модификации записей БД, т. е. при изменении столбцов или при их удалении и добавлении. В отличие от хранимых процедур, триггеры нельзя вызывать из приложения клиента, а также передавать им параметры и получать от них результаты. Триггеры обычно используются для программной реализации так называемых бизнес-правил. С их помощью удобно реализовать различные ограничения, например, ограничения на значения столбцов или ограничение ссылочной целостности, а также выполнять такие действия, как накапливание статистики работы БД или резервное копирования записей. СОЗДАНИЕ И ИЗМЕНЕНИЕ ТРИГГЕРА Создание триггера имеет следующий формат:
Описатели ACTIVE и INACTIVE определяет активность триггера стразу после его создания. По умолчанию действует ACTIVE. Описатели BEFORE и AFTER задают момент начала выполнения триггера. Описатели UPDATE, INSERT и DELETE определяют момент (событие) выполнения триггера. При наличии нескольких триггеров для одного события определяют порядок вызова триггеров, который указывается в операнде POSITION. Триггер можно удалить:
Изменяется триггер оператором ALTER TRIGGER, имеющим такой же формат. Программирование триггера ничем не отличается от программирования хранимых процедур. Отметим, что для доступа к значениям столбца используются конструкции формата:
СОЗДАНИЕ ГЕНЕРАТОРОВ ДЛЯ InterBase В отличие от базы данных Paradox, для таблиц InterBase отсутствует автоинкрементный тип, обеспечивающий автоматическую установку уникальных значений. Поэтому для обеспечения уникальности значений ключевых столбцов совместно с триггерами используются генераторы. Генератор возвращает уникальное целочисленное значение. Генератор создается следующим оператором:
Начальное значение задаётся командой:
Обращение к созданному генератору выполняется с помощью функции:
Примеры:
Использование функций, определяемых пользователем Пример библиотеки выполненной в среде Delphi:
Скомпилированную библиотеку нужно перенести в каталог с системой. Пример: С:\WINDOWS\SYSTEM32 Теперь объявляем функцию из библиотеки в БД:
CSTRING (<Число символов в строке>) обеспечивает вывод строковых значений (в соответствии с типом PChar в Delphi). Пример:
Отменяется объявление функции через оператор:
После объявления функции её можно вызывать в операторах языка SQL наряду со встроенными функциями. Отметим, что локальная версия сервера InterBase не поддерживает работу с функциями, определяемыми пользователем. |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
![]() ![]() ![]() |
Правила форума "Общие вопросы по базам данных" | |
|
Данный форум предназначен для обсуждения вопросов о базах данных не попадающих под тематику других форумов:
Данный форум не предназначен для:
Если вы не соблюдаете эти правила, не удивляйтесь потом не найдя свою тему/сообщение.
Полезные советы: Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, LSD, Zloxa. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | СУБД, общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |