DB2 SQL过程 - 在声明

时间:2015-08-18 10:20:30

标签: stored-procedures db2 ibm-midrange

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

我的程序需要从我们内部库中的视图中获取数据:INTERLIB。问题是我们使用ARCAD进行版本/发布/一切管理,而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 个答案:

答案 0 :(得分:1)

我认为你有两个选择:

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 @