隐式调用lob字段触发的ORA-22992

背景:

通过dblink的方式跨库查询将数据插入到本地库,但是报错ORA-22992,但是明明我的select里面并没有查询到lob字段呀,为什么还会报ORA-22992:无法使用从远程表选择的LOB定位符? 这是因为oracle隐式调用了lob字段导致的!(太鸡贼了)

在这里插入图片描述

SQL举例:

INSERT INTO test
      (id,
       NAME,
       VERSION,
       )
      SELECT a.id,
             a.name,
             a.version,
             a.valid,         
        FROM user.bbb@dblink a 
        LEFT JOIN user.ccc@dblink b ON a.ID=b.id

隐式 LOB 引用:即使你的 SELECT 未显式选择 LOB 字段,如果关联表(如 bbb@dblink auser.ccc@dblink b)中包含 LOB 字段(如 CLOB 类型的备注列),Oracle 可能会在分布式查询中尝试隐式引用这些字段。

验证: 删除掉left join以后能够正常执行,并且发现确实bbb与ccc表存在lob字段

说明:发现跨库的几张表中确实存在lob字段列,虽然并没有被sql显示地引用,但是被left join隐式调用了

解决方案:

原sql

LEFT JOIN user.ccc@dblink b ON a.ID=b.id

转换成,显式排除 LOB 字段

LEFT JOIN (
  SELECT 
    id -- 只选择需要的字段
  user.ccc@dblink b
) b ON a.id = b.id
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值