Полезное для программистов:

Фриланс
Новости
Статьи
   
Рубрики:

Error. Page cannot be displayed. Please contact your service provider for more details. (8)


Использование хранимых процедур. Сервер InterBase.

Поиск:
Хранимая процедура представляет собой программу, расположенную на сервере и вызываемую из приложения клиента. Использование этих объектов увеличивает скорость доступа к БД по следующим причинам:
1) вместо текста запроса, который может быть достаточно длинным, серверу передается по сети относительно короткие обращения к хранимой процедуре;
2) хранимая процедура, в отличие от запроса, не требует предварительной синтаксической проверки.
Еще одним преимуществом при обращении к хранимым процедурам является то, что, будучи общими, для всех приложений-клиентов, они реализуют единые для них правила работы с БД.

СОЗДАНИЕ И ИЗМЕНЕНИЕ ХРАНИМОЙ ПРОЦЕДУРЫ
Хранимая процедура является оператором.
Код

CREATE PROCEDURE
<Имя процедуры> [(<Список входных параметров>)]
[RETURNS (<Список выходных параметров>)]
AS <Тело процедуры>

Список параметров выглядит так:
Код

<Имя параметра> <Тип параметра>,

[<Имя параметра> <Тип параметра>]

При использовании параметра в выражениях тела процедуры перед его именем нужно указывать знак «:».
Тело процедуры состоит из двух частей – описательной и исполнительной.
Код

[<Объявление переменных>]
BEGIN
<Оператор1>
<Оператор2>

<ОператорN>
END

В теле процедуры должен содержаться как минимум один параметр.
Созданную процедуру можно удалить при помощи следующего оператора:
Код

DROP PROCEDURE <Имя процедуры>

Изменение процедуры выполняется оператором ALTER PROCEDURE, имеющим тот же формат, что и оператор CREATE PROCEDURE.

ЯЗЫК ХРАНИМЫХ ПРОЦЕДУР
Рассмотрим кратко основные составляющие языка хранимых процедур.
В язык хранимых процедур включены операторы:
1) объявления переменных;
2) присваивания;
3) условные;
4) составные;
5) цикла;
6) выбора записи;
7) выбора нескольких записей;
8) возврата значений;
9) выхода из процедуры;
10) вызова процедуры:
11) посылка сообщения;
Операторы должны заканчивать точкой с запятой, кроме составного оператора.
Объявление переменных:
Код

DECLARE VARIABLE <Имя переменной> <Тип переменной>;

Тип переменной совпадает с типом столбцов базы данных.
Пример:
Код

DECLARE VARIABLE Number INTEGER;
DECLARE VARIABLE NewString VARCHAR(10);
DECLARE VARIABLE WorkDate DATE;

Оператор присваивания имеет следующий вид:
Код

<Имя переменной> = <Выражение>;

Пример:
Код

DECLARE VARIABLE n INTEGER;
DECLARE VARIABLE s VARCHAR(30);

n = 17;
s = UPPER(s);

Условный оператор имеет следующий формат:
Код

IF (<Условие>) THEN <Оператор1> [ELSE <Оператор2>];

Соответственно оба оператора могут быть составными и иметь следующий вид:
Код

BEGIN
<Оператор1>
<Оператор2>

<ОператорN>
END

Пример:
Код

IF (x < 0)
THEN
 BEGIN
  n = 0;
  s = “”;
 END
ELSE
 n = 10;

Оператор цикла (повтора) имеет следующий формат:
Код

WHILE (<Условие>) DO <Оператор>;

Пример:
Код

s = 0;
n = 1;
WHILE (n <= 10) DO
BEGIN
 s = s + n;
 n = n + 1;
END

Оператор выбора записи представляет собой оператор SELECT, который возвращает одну строку, поэтому его называют также оператором выбора строки. Значение столбцов возвращаемой строки присваиваются указанным переменным или параметрам.
Пример использования:
Код

CREATE PROCEDURE pSalary
RETURNS (opSum FLOAT, opAvg FLOAT)
AS
BEGIN
 SELECT SUM(Salary), AVG(Salary)
 FROM Personnel
 INTO :opSum, :opAvg; /*Запись в параметры*/
END

Оператор выбора нескольких записей также представляет собой оператор SELECT, способный возвращать несколько записей:
Код

FOR <Оператор выбора записи> DO <Оператор>;

Пример:
Код

CREATE PROCEDURE pCountCode
RETURNS (opSum INTEGER)
AS
DECLARE VARIABLE n INTEGER;
DECLARE VARIABLE x INTEGER;
BEGIN
 x = 0;
 FOR SELECT Code FROM List INTO n DO
  x = x + n;
 opSum = x;
END

Часто после слова DO указывается оператор SUSPEND; возврата значений, который передает в вызывающее приложение или хранимую процедуру значения выходных параметров.
Пример:
Код

CREATE PROCEDURE pSalary2 (ipSalaryMin FLOAT, ipSalaryMax FLOAT)
RETURNS (opName VARCHAR(20), opSalary FLOAT)
AS
BEGIN
FOR SELECT Name, Salary FROM Personnel
WHERE Salary >= :ipSalaryMin AND Salary <= :ipSalaryMax
INTO :opName; :opSalary
DO SUSPEND;
END

Для немедленного выхода из процедуры используется оператор выхода:
Код

EXIT;

Из процедуры можно вызвать так же другую процедуру при помощи оператора EXECUTE:
Код

EXECUTE PROCEDURE <Имя процедуры> [(<Список входных параметров>)]
[RETURNING_VALUES (<Список выходных параметров>)]

Пример:
Код

CREATE PROCEDURE pTest
RETURNS (opResult FLOAT)
AS
BEGIN
 EXECUTE PROCEDURE pDivide (100, 20)
RETURNING_VALUES (opResult);
END

Для общения с приложением можно использовать посылку сообщений оператором POST_EVENT:
Код

POST_EVENT “<Имя события>”;
[code=sql]
Пример:
[code=sql]

[B]ВИДЫ ХРАНИМЫХ ПРОЦЕДУР[/B]
Процедуры делятся не два вида:
1) возвращающие одну строку (или процедуры действия):
2) возвращающие несколько строк (или процедуры выбора).
В теле процедур выбора размещаются совместно используемые операторы выбора нескольких записей и возврата значений – FROM SELECT … DO … SUSPEND, которые и обеспечивают вывод нескольких записей.
[B]ВЫЗОВ ХРАНИМОЙ ПРОЦЕДРУ ВЫБОРА[/B]
[code=sql]
SELECT * FROM pSalary2 (2000, 3000)

ВЫЗОВ ХРАНИМОЙ ПРОЦЕДУРЫ ДЕЙСТВИЯ
Код

EXECUTE PROCEDURE pSalary;



ТРИГГЕР
Триггер представляет собой процедуру, которая находится на сервере БД и вызывается автоматически при модификации записей БД, т. е. при изменении столбцов или при их удалении и добавлении. В отличие от хранимых процедур, триггеры нельзя вызывать из приложения клиента, а также передавать им параметры и получать от них результаты.
Триггеры обычно используются для программной реализации так называемых бизнес-правил. С их помощью удобно реализовать различные ограничения, например, ограничения на значения столбцов или ограничение ссылочной целостности, а также выполнять такие действия, как накапливание статистики работы БД или резервное копирования записей.

СОЗДАНИЕ И ИЗМЕНЕНИЕ ТРИГГЕРА
Создание триггера имеет следующий формат:
Код

CREATE TRIGGER <Имя триггера> FOR <Имя таблицы>
[ACTIVE | INACTIVE]
{BEFORE | AFTER}
{UPDATE | INSERT | DELETE}
[POSITION <Число>]
AS <Тело триггера>

Описатели ACTIVE и INACTIVE определяет активность триггера стразу после его создания. По умолчанию действует ACTIVE.
Описатели BEFORE и AFTER задают момент начала выполнения триггера.
Описатели UPDATE, INSERT и DELETE определяют момент (событие) выполнения триггера.
При наличии нескольких триггеров для одного события определяют порядок вызова триггеров, который указывается в операнде POSITION.
Триггер можно удалить:
Код

DROP TRIGGER <Имя триггера>

Изменяется триггер оператором ALTER TRIGGER, имеющим такой же формат.
Программирование триггера ничем не отличается от программирования хранимых процедур.
Отметим, что для доступа к значениям столбца используются конструкции формата:
Код

OLD.<Имя столбца> /*Обращение к старому значению*/
NEW.<Имя столбца> /*Обращение к новому значению*/


СОЗДАНИЕ ГЕНЕРАТОРОВ ДЛЯ InterBase
В отличие от базы данных Paradox, для таблиц InterBase отсутствует автоинкрементный тип, обеспечивающий автоматическую установку уникальных значений. Поэтому для обеспечения уникальности значений ключевых столбцов совместно с триггерами используются генераторы. Генератор возвращает уникальное целочисленное значение.
Генератор создается следующим оператором:
Код

CREATE GENERATOR <Имя генератора>;

Начальное значение задаётся командой:
Код

SET GENERATOR <Имя генератора> TO <Начальное значение>;

Обращение к созданному генератору выполняется с помощью функции:
Код

GEN_ID (<Имя генератора>, <Шаг>);

Примеры:
Код

CREATE GENERATOR GenStore;
SET GENERATOR GetStore TO 1;
GEN_ID (GetStore, 1);


Использование функций, определяемых пользователем
Пример библиотеки выполненной в среде Delphi:
Код

library IBDLL;

uses
SysUtils,
Classes;

function Sqrt2 (x: real): real cdecl; export;
begin
if x < 0
 then
  Sqrt2:=0
 else
  Sqrt2:=sqrt(s)
end;

exports
Sqrt2;

begin
end.

Скомпилированную библиотеку нужно перенести в каталог с системой. Пример: С:\WINDOWS\SYSTEM32
Теперь объявляем функцию из библиотеки в БД:
Код

DECLARE EXTERNAL FUNCTION <Имя функции>
[<Тип данных>, …, <Тип данных>]
RETURNS {<Тип данных> [BY VALUE] | CSTRING (<Целое число>)}
ENTRY_POINT “<Зарезервированное имя функции>”
MODULE_NAME “<Имя библиотеки>”;

CSTRING (<Число символов в строке>) обеспечивает вывод строковых значений (в соответствии с типом PChar в Delphi).
Пример:
Код

DECLARE EXTERNAL FUNCTION Sqrt2 FLOAT
RETURNS FLOAT BY VALUE
ENTRY_POINT “Sqrt2”
MODULE_NAME “IBDLL”;

Отменяется объявление функции через оператор:
Код

DROP EXTERNAL FUNCTION <Имя функции>;

После объявления функции её можно вызывать в операторах языка SQL наряду со встроенными функциями.
Отметим, что локальная версия сервера InterBase не поддерживает работу с функциями, определяемыми пользователем.
Автор: Pakshin A. S.
Сайт: http://pakshin.com.ru/






Просмотров: 14507

 

 

Новые статьи:


Популярные:
  1. Как сделать цикличным проигрывание MIDI-файла?
  2. Создание AVI файла из рисунков
  3. Как устройство "отключить в данной конфигурации"?
  4. Kто в данный момент присоединен через Сеть?
  5. Как узнать количество доступной памяти?
  6. Как реализовать в RichEdit разноцветный текст?
  7. Как скрыть свое приложение от ProcessViewer
  8. Как программно нажать/скрыть/показ кнопку "Start"?
  9. Модуль работы с ресурсами в PE файлах
10. Функции вызова диалоговых окон выбора
11. Проверка граматики средствами Word'а из Delphi.
12. Модуль для упрощенного вызова сообщений
13. Функции для записи и чтение своих данных в, ЕХЕ- файле
14. Рекурсивный просмотр директорий
15. Network Traffic Monitor
16. Разные модули
17. Универсальная функция для обращения к любым экспортируем функциям DLL
18. Библиотека от VladS
19. Протектор для UPX'а
20. Еще об ICQ, сообщения по контакт листу?
21. Использование открытых интерфейсов
22. Теория и практика использования RTTI
23. Работа с TApplication
24. Примеры использования Drag and Drop для различных визуальных компонентов
25. Что такое порт? Правила для работы с портами
26. Симфония на клавиатуре
27. Загрузка DLL
28. Исправление автоинкремента
29. Взаимодействие с чужими окнами
30. Проверить дубляжи в столбце


 

 

 
 
На главную