Инструменты пользователя

Инструменты сайта


execute_block

Различия

Здесь показаны различия между двумя версиями данной страницы.

Ссылка на это сравнение

Both sides previous revision Предыдущая версия
Следущая версия
Предыдущая версия
execute_block [2011/06/20 16:08]
82.117.234.129 [Пример]
execute_block [2012/02/03 12:00] (текущий)
Строка 1: Строка 1:
 +====== 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]] команд без создания процедуры.
 +
 +Поддерживает как входные так и выходные параметры.
 +
 +===== Пример =====
 +<code sql>
 +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
 +</​code>​
 +
 +
 +====Или====
 +<code sql>
 +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
 +</​code>​
 +===== Источник =====
 +\doc\sql.extensions\README.execute_block.txt
  
execute_block.txt · Последние изменения: 2012/02/03 12:00 (внешнее изменение)