如何在DB2中的存储过程中编写函数

如何在DB2中的存储过程中编写函数,db2,Db2,我能够在DB2中编写单独的存储过程和单独的函数。 我想在DB2中的存储过程中编写一个函数 请提供一个例子 请注意,我不希望有任何示例创建存储过程和函数,并从存储过程调用函数。这是函数内部和存储过程内部存储过程的示例 --#SET TERMINATOR @ create or replace FUNCTION outer_fn ( ) returns integer begin declare in_val integer; declare out_val integer; d

我能够在DB2中编写单独的存储过程和单独的函数。 我想在DB2中的存储过程中编写一个函数

请提供一个例子


请注意,我不希望有任何示例创建存储过程和函数,并从存储过程调用函数。

这是函数内部和存储过程内部存储过程的示例

--#SET TERMINATOR @

create or replace FUNCTION outer_fn (
 ) returns integer
 begin
  declare in_val integer;
  declare out_val integer;

  declare procedure inner_sp (
    in in_val integer,
    out out_val integer)
   begin
    set out_val = in_val + 1;
   end;
  set in_val = 1;
  call inner_sp(in_val, out_val);
  return out_val;
 end@

values outer_fn@

create or replace PROCEDURE outer_sp (
  out out_val integer
 )
 begin
  declare in_val integer;

  declare procedure inner_sp (
    in in_val integer,
    out out_val integer
   )
   begin
    set out_val = in_val + 1;
   end;

  set in_val = 1;

  call inner_sp (in_val, out_val);
 end
@

call outer_sp(?)
@
我不确定,但我认为不可能在过程或函数中定义函数

有关更多详细信息,可以检查在另一个存储过程中执行递归的过程

--#SET TERMINATOR @

create or replace FUNCTION outer_fn (
 ) returns integer
 begin
  declare in_val integer;
  declare out_val integer;

  declare procedure inner_sp (
    in in_val integer,
    out out_val integer)
   begin
    set out_val = in_val + 1;
   end;
  set in_val = 1;
  call inner_sp(in_val, out_val);
  return out_val;
 end@

values outer_fn@

create or replace PROCEDURE outer_sp (
  out out_val integer
 )
 begin
  declare in_val integer;

  declare procedure inner_sp (
    in in_val integer,
    out out_val integer
   )
   begin
    set out_val = in_val + 1;
   end;

  set in_val = 1;

  call inner_sp (in_val, out_val);
 end
@

call outer_sp(?)
@


最后,还可以创建一个模块,其中包含一个已发布的存储过程,该存储过程调用同一模块中的“已添加”存储过程/函数。“添加的”对象在模块外部不可见/不可用。

如果您指的是SQL-PL过程,则无法准确执行该操作。Db2用户定义函数(UDF)必须是与SQL-PL存储过程分开的对象,尽管可以在同一脚本中创建。但是,您可以创建一个“本地过程”(如中,在另一个SQL-PL存储过程中定义的存储过程)。对于不是用SQL-PL编写的存储过程,可以使用不同的选项,例如,在c/c++、rexx、java等中。