DB2 SQL 过程 - 在声明之前调用启动过程

DB2 SQL procedure - Calling initiate procedure before declaration

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

我的程序需要从我们内部库中的视图获取数据:INTERLIB。问题是我们用的是ARCAD进行version/release/everything管理,ARCAD不喜欢限定符,所以自动去掉了,意思就是一开始的声明在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 @