程序员的知识教程库

网站首页 > 教程分享 正文

详解一个Oracle新特性--INSERT ALL/ANY,让你的sql更高效

henian88 2024-08-16 17:28:02 教程分享 4 ℃ 0 评论

概述

分享一个最近在给部门培训时用的一个新特性,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方面的内容,感兴趣的朋友可以关注一下~


Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表