【发布时间】:2019-04-01 21:58:21
【问题描述】:
我需要比较两个不同 DB2 数据库实例的数据。我们不允许建立联邦。我找到了说明如何指定从远程数据库加载数据的参考资料,以及有关如何指定数据库连接的参考资料,包括数据库名称、用户名等。理想情况下,我可以对一个数据库执行查询,然后将其与第二个数据库可以是一对一的(使用 SQL PL 循环等),也可以是单个大型连接。我已经到了 SQL PL 脚本可以依次连接到每一个的地步(它会提示我输入两者的密码),但是当我尝试查询表时它只识别第二个。
我们尝试过的: 在开头添加两个不同的 CONNECT 语句。
声明一个游标并指定数据库名称(这似乎只在从一个数据库加载到另一个数据库时才有效,我们试图避免这种情况)。
set serveroutput on@
set sqlcompat DB2@
connect to first user myname@
connect to second user myname@
-- run command: db2 -td@ -vf test3.sql
begin
declare loop_counter int;
call dbms_output.enable(100000);
set loop_counter = 0;
FIRSTLOOP: for o as ord1 cursor for
select field1, field2 from first.firstschema.firsttable fetch first 10 rows only with ur
do
set loop_counter = loop_counter + 1;
call dbms_output.put_line('Field: '||field1||', other '||field2);
end for;
call dbms_output.put_line('End first program: ');
SECONDLOOP: for p as ord2 cursor for
select field1, field2 from second.secondschema.secondtable fetch first 10 rows only with ur
do
set loop_counter = loop_counter + 1;
call dbms_output.put_line('Field: '||field1||', other '||field2);
end for;
call dbms_output.put_line('After second call');
end@
理想情况下,两个游标循环中的每一个都将打印 10 行。实际上,无论哪个 CONNECT 第二个完成都是有效的。例如,如果我先连接到 SECOND,然后再连接到 FIRST,则第一个循环有效,第二个循环显示“..... 是一个未定义的名称”。如果我先连接到 FIRST,然后再连接到 SECOND,第一个循环会抛出错误并且我没有得到任何输出。
【问题讨论】:
标签: database db2 multiple-instances