我想写一个存储过程,在AS400的DB2,它在本地数据库上运行查询(存储过程相同;它是命名为DBLocale
),另一个在远程数据库(我们称之为DBRemoto
)。在iSeries Navigator中,我可以看到他们都选择“数据库”节点。我尝试了一些CONNECT TO DBRemoto;
和/或SET CONNECTION DBRemoto;
,但得到了奇怪的结果:“连接已经存在”,“连接不存在”,“CALL指令完成”(但没有结果集)等。在一个过程连接到2个数据库:一个本地和另一个远程
这将是我所期望的事情:
CREATE PROCEDURE MYLIB.TEST_CONNECT_INSIDE_PROCEDURE
DYNAMIC RESULT SETS 1
LANGUAGE SQL
READS SQL DATA
BEGIN
DECLARE sql_string VARCHAR(1024) DEFAULT '';
DECLARE locale INT DEFAULT -1;
DECLARE remoto INT DEFAULT -1;
DECLARE cur CURSOR FOR stmt;
DECLARE curOut CURSOR FOR select locale, remoto from SYSIBM.SYSDUMMY1;
-- run the same query in both DBs; I checked, results must be different
SET sql_string = 'select count(*) as QTY from MYLIB.MYTABLE';
-- run locally
CONNECT TO DBLocale; --it's one of my attempts
PREPARE stmt FROM sql_string;
OPEN cur;
FETCH cur INTO locale;
CLOSE cur;
-- run remotely
CONNECT TO DBRemoto; --it's one of my attempts
PREPARE stmt FROM sql_string;
OPEN cur;
FETCH cur INTO remoto;
CLOSE cur;
-- output results
OPEN curOut;
SET RESULT SETS CURSOR curOut;
END;
我把它与
call MYLIB.TEST_CONNECT_INSIDE_PROCEDURE()
谁能告诉我,如果有可能,并说明它是如何工作的,好吗?如果在程序中不可行,是否有解决方法?非常感谢!
Bob Cozzi和家庭人参考。真棒。 – jamesallman 2012-02-10 17:27:07
谢谢!你确定密码需要引号吗?无论如何,它在任何情况下都不起作用:它不会创建过程并给我一个SQL7032错误。 – bluish 2012-02-13 13:16:20