Stored procedures DB2SQL过程-在声明之前调用initiate过程

Stored procedures DB2SQL过程-在声明之前调用initiate过程,stored-procedures,db2,ibm-midrange,Stored Procedures,Db2,Ibm Midrange,我正在制作一个sql过程(在libextlib中),它将使用JDBC从外部系统调用。我们有一个用户EXTUSER,用于运行来自那里的所有请求。问题是这个用户只能有一个启动库,在我们的例子中是EXTLIB(如果有人知道如何添加更多,请告诉我,并成为我公司的英雄)。我们有一个启动环境的过程initiate(即向LIBL添加所有必要的lib)。这需要在EXTLIB中的所有过程开始时调用 我的过程需要从内部lib:INTERLIB中的视图中获取数据。问题是我们使用Arcade进行版本/发布/所有内容管理

我正在制作一个sql过程(在libextlib中),它将使用JDBC从外部系统调用。我们有一个用户EXTUSER,用于运行来自那里的所有请求。问题是这个用户只能有一个启动库,在我们的例子中是EXTLIB(如果有人知道如何添加更多,请告诉我,并成为我公司的英雄)。我们有一个启动环境的过程
initiate
(即向LIBL添加所有必要的lib)。这需要在EXTLIB中的所有过程开始时调用

我的过程需要从内部lib:INTERLIB中的视图中获取数据。问题是我们使用Arcade进行版本/发布/所有内容管理,Arcade不喜欢限定符,因此它会自动删除它们,这意味着开始时的声明在INTERLIB中找不到视图,因此它在到达
initate
调用之前停止

我需要一种在声明之前运行调用的方法,同时保留功能。我也愿意接受任何其他替代方案。我唯一能想到的是用RPG编码,但是我们有很多简单的过程,这只是浪费时间。在STRSQL中手动创建过程不是一个选项,因为当ARCAD将一个版本传输到生产环境时,它将重新编译所有内容,从而删除我们在那里放置的任何手动限定符

代码如下:

CREATE PROCEDURE MyProcedure ()
  LANGUAGE SQL
  SPECIFIC MYFILE
  CALLED ON NULL INPUT
  DYNAMIC RESULT SETS 1
BEGIN

  declare c1 cursor with return to client for
    select
      id,
      required
    from INTERLIB.cus_CustomerPurpose_v3_0

  call INITIATE();

  open c1;

  call DEINITIATE();
END;  

我认为你有两个选择:

1) 要在存储过程中创建内部块

CREATE PROCEDURE MyProcedure ()
  LANGUAGE SQL
  SPECIFIC MYFILE
  CALLED ON NULL INPUT
  DYNAMIC RESULT SETS 1
BEGIN
  call INITIATE();
  BEGIN
    declare c1 cursor with return to client for
      select
        id,
        required
      from INTERLIB.cus_CustomerPurpose_v3_0;
    open c1;
  END;
  call DEINITIATE();
END @
2) 调用另一个存储过程

CREATE PROCEDURE MyProcedure ()
  LANGUAGE SQL
  SPECIFIC MYFILE
  CALLED ON NULL INPUT
  DYNAMIC RESULT SETS 1
BEGIN
  call INITIATE();
  call another_SP();
  call DEINITIATE();
END @
chgusrpf extuser jobd(prodjobd)