如何在 AS400 中连接来自 2 个不同服务器的 2 个表?

问题描述 投票:0回答:3

我正在使用 AS400 版本 7.1。

具备以下条件:

服务器A (SA) - 数据库A (DBA) - 表A (TA)

服务器B (SB) - 数据库B (DBB) - 表B (TB)

SELECT A.*, B.* 
FROM SA.DBA.TA A INNER JOIN SB.DBB.TB
ON A.PN=B.PN
WHERE A.PN='BFDKS';

在 AS400 中连接来自两个不同服务器的 2 个表的正确语法是什么?

我收到以下错误

关系数据库SA不在关系数据库目录中

sql ibm-midrange db2-400
3个回答
2
投票

我很确定目前 Db2 for i 不可能实现这一点...

由三部分组成的名称对于 i 来说是新的,据我所知仅限于

插入 mylib.mytable (从remotedb.somelib.sometable中选择*);

参见 使用远程子选择创建表

或者在触发程序中.. 请参阅触发器中的由三部分组成的名称

Db2 for LUW 具有这样的联合功能...

我见过的一个解决方法是使用用户定义的表函数 (UDTF) 从远程 Db2 for i 数据库返回行..


1
投票

在 DB2 for i 上不可能。但就像查尔斯说的,你可以做到:

-- run this instructions on server B

create table qtemp.SADBATA as (
SELECT A.* FROM SA.DBA.TA A
where A.PN='BFDKS'
) with data;

SELECT * FROM qtemp.SADBATA A INNER JOIN SB.DBB.TB ON A.PN=B.PN;

0
投票

您可以创建一个表函数,在单个 SQL 语句中命中服务器 B 并将行返回到服务器 A。这有多种口味;有或没有参数(键)。

CREATE OR REPLACE FUNCTION                    
remote_inventory()                     
RETURNS TABLE (                               
UPC CHAR(64),                          
QUANTITY INT)                             
LANGUAGE SQL                                  
no external action                            
reads sql data                                
fenced                                        
cardinality 1                                 
BEGIN                                         
return   select UPC,quantity       
   from systemB.locallib.inventory;            
end               


Select a.upc,a.quantity,b.quantity
 from locallib.inventory a, table(remote_inventory()) b
  where a.upc = b.upc
© www.soinside.com 2019 - 2024. All rights reserved.