当前位置:Gxlcms > 数据库问题 > 《Oracle每日一练》Merge Into 语句代替Insert/Update在Oracle中的应用实战

《Oracle每日一练》Merge Into 语句代替Insert/Update在Oracle中的应用实战

时间:2021-07-01 10:21:17 帮助过:10人阅读

都跟alias1进行 ON (join condition)的比较,如果匹配,就进行更新的操作(Update),如果不匹配,就进行插入操作(Insert)。

因此,严格意义上讲,”在一个同时存在Insert和Update语法的Merge语句中,总共Insert/Update的记录数,就是Using语句中alias2的记录数。”

以上这句话也就很好的解释了在上面写的语句为何只能进行Update,而不能进行Insert了,因为都Select不到数据,如何能进行Insert呢:)

接下来要改成正确的语句就容易多了,如下:

技术分享MERGE INTO T T1
技术分享USING (SELECT ‘1001‘ AS a,2 AS b FROM dual) T2
技术分享ON ( T1.a=T2.a)
技术分享WHEN MATCHED THEN
技术分享  UPDATE SET T1.b = T2.b
技术分享WHEN NOT MATCHED THEN 
技术分享  INSERT (a,b) VALUES(T2.a,T2.b);

查询结果,OK!

注意:

如果不懂Merge语句的原理,Merge语句是一条比较危险的语句,特别是在您只想更新一条记录的时候,因为不经意间,你可能就把整表的数据都Update了一遍.....汗!!!

我曾经犯过的一个错误如下所示,大家看出来是什么问题了吗?

技术分享MERGE INTO T T1
技术分享USING (SELECT Count(*) cnt FROM T WHERE T.a=‘1001‘) T2
技术分享ON (T2.cnt>0)
技术分享WHEN MATCHED THEN
技术分享  UPDATE SET T1.b = T2.b
技术分享WHEN NOT MATCHED THEN 
技术分享  INSERT (a,b) VALUES(T2.a,T2.b);   参考:http://www.cnblogs.com/dongsheng/p/4384754.html 帖子:http://bbs.csdn.net/topics/391895204  

《Oracle每日一练》Merge Into 语句代替Insert/Update在Oracle中的应用实战

标签:

人气教程排行