590_____________________________________________Глава 10

10.3.5 Хранимые на сервере процедуры

10.3.5.1 Создание выполняемых процедур

Клиенты, связанные с SQL сервером, могут обращаться к его мощностям для
решения сложных задач. Это эффективнее, чем решать подобные задачи на более
слабом компьютере клиента. К тому же, это позволяет минимизировать объемы
информации, пересылаемой через сеть. Например, если пользователю нужно отыс-
кать только одну конкретную запись и просмотреть в ней некоторые поля, целесо-
образно всю процедуру поиска выполнить на сервере, а пользователю переслать то-
лько интересующие его поля найденной записи. В идеале клиент должен получать
только тот минимум данных, которыми манипулирует пользователь.

Многие серверы, в том числе Interbase, разрешают написание специальных
процедур, хранимых и выполняемых на сервере. К сожалению, язык написания
хранимых процедур различен в разных системах. И язык Interbase имеет мало об-
щего с языком Sybase или Microsoft SQL сервера.

Interbase поддерживает 2 вида хранимых процедур: выполняемые (Execute),
которые могут передавать параметры и которые манипулируют данными, и проце-
дуры. выбора (Select), которые представляют собой таблицы только для чтения, но
которые воспринимают параметры, определяющие возвращаемые результаты.

Рассмотрим сначала процесс создания выполняемых хранимых процедур.
Простейший путь для этого — написание соответствующих script — файлов и их
выполнение с помощью WISQL. Следует подчеркнуть, что использование интерак-
тивного режима работы с WISQL для создания хранимых процедур не допускается.

Структура соответствующего файла может иметь вид:

CONNECT <база данных> USER <имя пользователя> PASSWORD <пароль>;

SET AUTODLL OFF;

SET TERM л ;

CREATE PROCEDURE <имя процедуры> AS
BEGIN

END"

SET TERM ;"
COMMIT;

Первая команда Connect связывается с базой данных. Вторая команда Set от-
ключает опцию AUTODDL. Это предотвращает процедуру от преждевременного
создания. Следующая команда Set Term заменяет символ окончания «;» на «"о.
Зачем это надо? Операторы Interbase и операторы SQL, используемые при написа-
нии текста процедуры, имеют одинаковые символы окончания — «;». Поэтому
транслятор не сможет разобраться, где операторы Interbase, а где операторы про-
цедуры. Чтобы не возникало этой путаницы, команда Set временно заменяет сим-
вол окончания операторов Interbase на <<"». В результате транслятор будет знать,
что если встретится оператор, кончающийся символом «*» — это будет оператор
Interbase. А символы окончания операторов процедуры остались прежними — о;».

После рассмотренных подготовительных операторов следует оператор созда-
ния процедуры Create Procedure, в котором указывается имя процедуры. После
ключевого слова AS следуют операторы самой процедуры, начинающиеся с begin
и кончающаяся end". После этого оператора транслятор начинает обрабатывать да-
льнейшее как операторы Interbase. Следующий оператор Set Term переключает
символ окончания на традиционный — <<;», а оператор Commit фиксирует резуль-
тат создания процедуры в базе данных.

Файл может содержать операторы создания нескольких процедур. Каждая из
них компилируется отдельно. Те, которые откомпилировались без синтаксических
ошибок, будут записаны в базу данных.