oracle报错01779,ora-01779错误

在对update进行优化时,考虑到update from 效率比较高,但由于Oracle会对键值进行检查,导致报ora-01779错误,通过采用BYPASS_UJVC跳过Oracle的键的判定,达到同样的效果。

例子如下:

update (select   /*+ BYPASS_UJVC */

t1.drawref,

t.oprtype,

t.bl_validation,

'F' bl_validation_new,

t.bl_msg,

t.bl_msg ||

case when (t1.drawref is null and t.oprtype = 'U') then  '交易帐户编号不存在,不能更新;'

when (t1.drawref is null and t.oprtype = 'D') then  '交易帐户编号不存在,不能删除;'

when (t1.drawref is not null and t.oprtype = 'I') then '交易帐户编号已存在,不能插入;'

end bl_msg_new

from  s_bl2_con_pro_temp t

left join s_bl2_con_pro t1

on t.drawref = t1.drawref

where

--t.bl_user =134

(t.OPRTYPE <> 'N' OR t.OPRTYPE is null)

and  t1.BL_DELETED(+) = 'F'

and t1.OPRTYPE(+) in ('U','D','I')

and t1.partition_key(+) = '201202290000'

and t.partition_key = '201202290000'

)

set bl_validation = bl_validation_new,

bl_msg = bl_msg_new

;

commit;

具体说明如下:

在我们肯定当前条件能确定记录唯一,又不是主键的时候,可以采用两种方法处理。

1、创建唯一性索引

2、update ( select /*+ BYPASS_UJVC */ a.cola va,b.colb vb from a,b where a.id=b.id) set va=vb

BYPASS_UJVC的作用是跳过Oracle的键的判定。0b1331709591d260c1c78e86d0c51c18.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值