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 @
我正在制作一个 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 @