====== EXECUTE BLOCK ====== ===== Версии сервера ===== Firebird 2.0 ===== Доступно в ===== [[raznovidnosti_jazyka_sql|DSQL]], [[raznovidnosti_jazyka_sql|ESQL]], [[raznovidnosti_jazyka_sql|ISQL]], [[raznovidnosti_jazyka_sql|PSQL]] ===== Формат ===== EXECUTE BLOCK [ (inparam datatype = :<название параметра>, ...) ] [ RETURNS (outparam datatype, ...) } AS [DECLARE VARIABLE varparam datatype; ...] BEGIN ... END inparam - входящие параметры outparam - исходящие параметры varparam - переменые доступные внутри блока datatype - [[tipy_dannyx|тип данных]] ===== Описание ===== функция позволяет выполнять набор [[raznovidnosti_jazyka_sql|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