Виды хранимых процедур в InterBase

В InterBase существует два типа хранимых процедур:

1. Процедуры выбора данных – могут использоваться вместо таблиц в операторе SELECT.

2. Выполняемые процедуры – производят какие-либо действия с базой данных и не обязаны возвращать данные. Вызываются с помощью команды EXECUTE PROCEDURE.

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

Оба типа процедур имеют одинаковый синтаксис создания и формально ничем не отличаются. Любая выполнимая процедура, если она имеет выходные параметры, может быть вызвана в запросе SELECT, любая процедура выбора данных – с помощью EXECUTE PROCEDURE. Разница заключается в цели разработки процедур каждого вида. Процедура выбора данных специально создается для вызова из оператора SELECT, а выполняемая процедура – для вызова оператором EXECUTE PROCEDURE.

Пример создания процедуры выбора данных:

-- возвращает перечень служащих, работающих в отделе,

-- который передается в качестве входного параметра:

CREATE PROCEDURE Test_Procedure (DeptNo CHAR(3))

RETURNS

(

Number INT, -- порядковый номер

EmpNo SMALLINT, -- идентификатор служащего

FirstName VARCHAR(15), -- имя LastName

VARCHAR(20) -- фамилия

) AS

BEGIN

Number = 0;

FOR

SELECT EMP_NO, FIRST_NAME, LAST_NAME

FROM Employee

WHERE DEPT_NO =:DeptNo

INTO:EmpNo,:FirstName,:LastName

DO

BEGIN

Number = Number + 1;

SUSPEND;

END

END;

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

Пример вызова процедуры выбора данных:

SELECT * FROM Test_Procedure('000');

Пример создания выполняемой процедуры:

CREATE PROCEDURE MakeGenerator (GenName VARCHAR(31),

GenValue INTEGER)

AS

DECLARE VARIABLE Sql VARCHAR(256);

BEGIN

Sql = 'CREATE GENERATOR ' || GenName || ';';

EXECUTE STATEMENT Sql;

Sql = 'SET GENERATOR ' || GenName || ' TO ' ||

CAST(GenValue AS VARCHAR(10)) || ';';

EXECUTE STATEMENT Sql;

END;

Синтаксис оператора вызова процедуры:

EXECUTE PROCEDURE ИмяПроцедуры

[Параметр [, Параметр...]]

[RETURNING_VALUES Параметр [, Параметр...]];

Пример вызова выполняемой процедуры:

EXECUTE PROCEDURE MakeGenerator 'Test_Gen', 1;


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: