EXECUTE BLOCK
Версии сервера
Firebird 2.0
Доступно в
Формат
EXECUTE BLOCK [ (inparam datatype = :<название параметра>, …) ] [ RETURNS (outparam datatype, …) } AS [DECLARE VARIABLE varparam datatype; …] BEGIN … END
inparam - входящие параметры
outparam - исходящие параметры
varparam - переменые доступные внутри блока
datatype - тип данных
Описание
функция позволяет выполнять набор PSQL команд без создания процедуры.
Поддерживает как входные так и выходные параметры.
Пример
execute block returns (result varchar(30))
AS
declare variable vtest integer;
begin
UPDATE rdb$functions fr
SET fr.rdb$function_name = fr.rdb$function_name
WHERE 1 = 1;
result = 'Обновили '||row_count||' записей';
suspend;
UPDATE rdb$functions fr
SET fr.rdb$function_name = fr.rdb$function_name
WHERE fr.rdb$function_name = 'test';
result = 'Обновили '||row_count||' записей';
suspend;
FOR SELECT fr.rdb$function_type
FROM rdb$functions fr
WHERE fr.rdb$function_name LIKE 'RDB$%'
INTO :vtest do
begin
end
result = 'Получили '||row_count||' записей';
suspend;
end
Или
execute block (pass1 varchar(255) = :pass1)
as
begin
if (exists (select id from toptions2 where name = 'dbpass')) then
update TOPTIONS2 set val = :pass1 where name = 'dbpass';
else
insert into TOPTIONS2 (name, val) values ('dbpass', :pass1);
end
Источник
\doc\sql.extensions\README.execute_block.txt
Обсуждение