创建dblink关联不同ORACLE数据库的表

项目场景:

在多个ORACEL数据库中查询相关联数据并整合,之前使用Java代码进行数据处理,
A表和B表在不同ORACLE数据库中,业务简写如下:

@Getter
@TableName("A")
public class A{
    private String pos;
    private String name;
}
@Getter
@TableName("B")
public class B{
    private String pos;
    private String description;
}
@AllArgsConstructor
public class C{
    private String pos;
    private String name;
    private String description;
}
public static void main(String[] args) {
    List<A> listA = new ArrayList<>(); //A表查询结果
    List<B> listB = new ArrayList<>(); //B表查询结果
    List<C> listC = listA.stream().map(a->{
        B b = listB.stream().filter(i-> Objects.equals(i.getPos(), a.getPos())).findAny().get();
        return new C(a.getPos(),a.getName(), b.getDescription());
    }).collect(Collectors.toList());
}

如果在一个数据库中可以用SQL

SELECT A.POS,A.NAME,B.DESCRIPTION
FROM A
LEFT JOIN B
ON A.POS = B.POS

于是寻找多数据库查询的方案


问题描述

执行以下SQL

CREATE PUBLIC DATABSE LINK dblink名称 
CONNECT TO 用户 IDENTIFIED BY 密码 USING
'(description=
(address_list=(address=(protocol=tcp)(host=IP)(port=PORT)))
(connect_data=(service_name=SERVICENAME))
)'

依次出现权限不足和密码含有%错误


原因分析:

PUBLIC关键字是给所有用户添加dblink,当前连接用户权限不足就无法给所有用户添加dblink
用户和密码信息可不添加在""内,但遇到特殊字符不加 ""无法解析


解决方案:

去掉PUBLIC关键字,只为当前用户创建对其他数据库的dblink
密码添加在""

最后实现一条SQL查询不同ORACLE数据库的表

SELECT A.POS,A.NAME,B.DESCRIPTION
FROM A
LEFT JOIN B@dblink名称
ON A.POS = B.POS
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值