oracle insert 触发器无效_详解一个Oracle新特性--INSERT ALL/ANY,让你的sql更高效
概述分享一个最近在给部门培训时用的一个新特性,INSERT ALL/ANY。这里先看一下下面这个场景。需求从一张表取数据插入到另一张表中,此外需要为插入的目标表做一个应用级的日志表,也就是说在插入目标表的同时,还需要将相同的数据插入到日志表中。大家可以想一下,如果是你,会怎么去实现这个需求?方案1:考虑触发器不过方案1存在以下几个问题:⚫ CREATE TRIGGER• 太“重”• 实现与需求有差
概述
分享一个最近在给部门培训时用的一个新特性,INSERT ALL/ANY。这里先看一下下面这个场景。
需求
从一张表取数据插入到另一张表中,此外需要为插入的目标表做一个应用级的日志表,也就是说在插入目标表的同时,还需要将相同的数据插入到日志表中。
大家可以想一下,如果是你,会怎么去实现这个需求?
方案1:考虑触发器
不过方案1存在以下几个问题:
⚫ CREATE TRIGGER
• 太“重”
• 实现与需求有差异
• 增加后续维护成本
• 触发器效率较低
方案2:考虑插入两次
这里方案2也存在几个问题:
事实上,以上这种写法是错误的,因为在两次insert的过程中,t表的数据有可能已经发生了变化,也就是说,t1,t2表得到的数据有可能不一样。
方案3:考虑游标
方案3存在以下问题:
方案4:考虑批量绑定
把T_ORG的数据批量绑定到v_id,v_name,然后用forall语法插入
方案4问题:这个方法就显得复杂很多了。
最终方案
Oracle中的insert all是指把同一批数据插入到不同的表中,所以利用了Oracle这个新特性,实现逻辑也很清晰。
总结
总之对于插入多张表或限定条件插入的优先选择insert all语法。
后面会分享更多devops和DBA方面的内容,感兴趣的朋友可以关注一下~
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐



所有评论(0)