Выполнение временной процедуры

Определение оператора выполнения временной процедуры.

Спецификация

   
< выполнение временной процедуры >::=
EXECUTE BLOCK [AUTHID {CURRENT_USER | DEFINER}]
[RESULT тип данных] [FOR DEBUG]
процедурный блокEND

Синтаксические правила

Правила оформления < процедурного блока > приведены в разделе Общий вид процедурного блока.

Примечание

Опции AUTHID и FOR DEBUG не запрещены по синтаксису, но реально их использовать затруднительно.

Примеры

1) Временная процедура:
execute block result int
declare
  var i int; //
code
  i := 1; //
  print("execute block");//
  return i; //
end;

2) Временная процедура с SQL-запросом:
create or replace table test(i int);
execute block result int
declare
  var i int; //
code
  i := 12; //
  execute direct "insert into test values(1)";//
  execute "insert into test values(2)";//
  return i; //
end;
select * from test;

3) Временная процедура с курсором:
execute block result cursor(i int)
declare //
  var b typeof(result); //
code //
  open b for "select i from test;"; //
  return b; //
end;

4) Рекурсивный вызов временных процедур:
execute block result int
declare
  var i int; //
code
  i := 123; //
  execute direct "execute block result int for debug declare var i int; //
                  code 
                    i:=12; //
                    execute direct \"insert into test values(3)\"; //
                    execute \"insert into test values(4)\"; //
                    return i; //
                  end;"; //
  return i; //
end;
select * from test;