Создание приложений для работы с базами данных в сети____________591

После того, как процедура создана, ее можно тестировать в WISQL в интерак-
тивном режиме. Для вызова процедуры достаточно выполнить оператор

EXECUTE PROCEDURE <имя>;

Процедуры могут выполняться любым путем: интерактивно в WISQL, из при-
ложения, могут вызываться из других процедур и даже из самих себя — т.е. пре-
дусмотрена возможность рекурсии.

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

DROP PROCEDURE <имя>;

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

Без учета стандартных начальных и конечных операторов создание такой про-
цедуры осуществляется следующим кодом:

CREATE PROCEDURE Getinf (pFam char(20), pNam char(20), pPar char(20))

RETURNS (pYear integer, pDep char(15),pSex char(l))
AS
BEGIN

pYear=0;

SELECT Year_b, Dep, Sex From Pers WHERE
(Fam=:pFam)and(Nani=:pNam)and(Par=:pPar)
INTO pYear, pDep, pSex;

END;-'

Просмотрев данный текст, вы можете увидеть, что передаваемые в процедуру
параметры определяются через прискобочную запись, следующую за именем про-
цедуры, причем для каждого параметра указывается его тип. Это очень похоже на
объявление процедуры в любом алгоритмическом языке. Возвращаемые парамет-
ры указываются аналогичным образом после ключевого слова RETURNS. В при-
веденной процедуре все имена начинаются с символа «р», но это, конечно, не обя-
зательно. Просто подобное обозначение позволяет легче читать текст процедуры и
не путать параметры с именами полей.

Тело процедуры состоит всего из двух операторов. Первый из них задает зна-
чение возвращаемого параметра pYear, равное нулю. Второй оператор Select ищет
запись, в которой значения полей Fam, Nam и Par совпадают соответственно с за-
данными значениями фамилии, имени и отчества (параметрами pFam, pNam и
pPar). Если такая запись нашлась, то в параметры pYear, pDep и pSex (указаны
после ключевого слова Into) передаются значения полей Year_b, Dep и Sex, указан-
ных после ключевого слова Select. Таким образом конструкция Select ... Into по-
зволяет заносить результаты отбора в параметры. Если искомая запись отсутству-
ет в базе данных, оператор Select ничего в параметры не заносит. Следовательно, в
возвращаемом параметре pYear останется 0, присвоенный предыдущим операто-
ром. Это будет сигналом для программы, вызвавшей данную процедуру, об отсут-
ствии записи.

Вызов такой процедуры из WISQL может осуществляться оператором вида:

EXECUTE PROCEDURE GETINF("Иванов","Иван","Иванович")