Firebird поддерживает два механизма, чтобы вызвать сохраненные процедуры.
execute procedure MyProc(?,?)
В этом примере сохраненная процедура ожидает получать данные, основанные на параметрах, которые передаются. Если процедура имеет выходные параметры, тогда будет возвращен один набор значений этих параметров, иначе ничто не будет возвращено.
select * from MyProc(?,?)
В этом примере сохраненная процедура будет формировать набор результатов.
Программы типа Microsoft Excel и т.д, при вызове сохраненной процедуры используют следующий формат:
{[? =] Call MyProc (?,?)}.
Firebird ODBC драйвер определяет то, какое обращение использовать,
чтобы выполнить сохраненную процедуру, в зависимости от того, как сохраненная
процедура была создана. Ключевое слово SUSPEND в теле процедуры выступает
в роли такого переключателя.
Рассмотрим более детально на примерах.
Пример 1
create procedure TEST
as
begin
end
Эта процедура не имеет ключевого слова SUSPEND. Firebird ODBC драйвер
будет выполнять процедуру как
execute procedure TEST
Пример 2
create procedure "ALL_LANGS"
returns ("CODE" varchar(5),
"GRADE" varchar(5),
"COUNTRY" varchar(15),
"LANG" varchar(15))
as
BEGIN
"LANG" = null;
FOR SELECT job_code, job_grade, job_country FROM job
INTO :code, :grade, :country
DO
BEGIN
FOR SELECT languages FROM show_langs(:code, :grade, :country)
INTO :lang
DO
SUSPEND;
/* Put nice separators between rows */
code = '=====';
grade = '=====';
country = '===============';
lang = '==============';
SUSPEND;
END
END
Эта процедура имеет ключевые слова SUSPEND. Firebird ODBC драйвер
будет выполнять процедуру как
select * from ALL_LANGS
Для более подробного ознакомления с этими и другими возможностями пожалуйста, рассмотрите примеры.