Oracle中实现根据条件对数据的增删改操作——Merge Into

一、需求描述

在我们进行项目开发的过程中,会遇到这样的场景,需要根据某个条件对数据进行增、删、改的操作;遇到这种情况我们有2种方法进行解决:

方法一:①查询指定条件;②根据查询出的指定条件结果在执行对应的增、删、改操作;

方法二:直接使用Merge Into语句根据条件进行对应的增、删、改操作;

二、Merge Into

MERGE (oracle.com)https://docs.oracle.com/en/database/oracle/oracle-database/19/sqlrf/MERGE.html#GUID-5692CCB7-24D9-4C0E-81A7-A22436DC968F

2.1、Merge Into的语法

复制代码
Merge Into语法:

MERGE INTO table|view A
USING (table | view | sub_query) B
ON (condition)
WHEN MATCHED THEN
  UPDATE table_name SET col1 = col_val1, col2 = col2_val
WHEN NOT MATCHED THEN
  INSERT (column_list) VALUES (column_values);

该语法的含义是:

操作A表或视图的数据,其操作数据的来源为B中数据的记录数,通过ON括号中的条件进行过滤,当A和B中的数据通过on条件进行过滤后,如果存在就执行更新操作,如果不存在就执行插入操作。

2.2、Merge Into示例

现有grade和grade2这2个表,现在需要实现:查询grade表的人名与grade2中人名相同则将grade表中对应相同人名的年龄全部更新为26;否则在grade中插入grade没有但是grade2表有的人名信息:

复制代码
merge into "grade" A
using (SELECT * from "grade2") B
ON (A."name"=B."name") 
when matched then
	UPDATE set A."age"=22
when not matched then 
	insert("id","name","course","score","sex","age") values(10,B."name",'语文',B."chinese",'女',27);

三、使用Merge时的3个注意事项

3.1、注意事项一

如果using中的语句查询不出来数据,是不会执行insert方法的,因为这个语法是根据using 中的查询数据进行判断的。

3.2、注意事项二

Merge into语句写的时候on 中的条件记得过滤准确,不然可能会执行全表更新.

3.3、注意事项三

Merge into语句ON中的条件不能用于更新操作列,不然会报错:ORA-38104

相关推荐
m0_7369191031 分钟前
超越Python:下一步该学什么编程语言?
jvm·数据库·python
m0_7482299942 分钟前
ThinkPHP快速入门:从零到实战
c语言·开发语言·数据库·学习
阿蒙Amon1 小时前
C#每日面试题-Thread.Sleep和Task.Delay的区别
java·数据库·c#
沉舟侧畔千帆过_1 小时前
一个DBA的真心话:搞定Oracle+PG双库,我就靠这招
数据库·oracle·dba
奈斯ing1 小时前
【Oracle篇】基于OGG 21c全程图形化实现9TB数据从Oracle 11g到19c的不停机迁移(上):微服务架构详解与微服务部署,及同步问题总览(第一篇,总共三篇)
微服务·oracle·架构
醉风塘1 小时前
【终极解决方案】Oracle ORA-01795错误:IN列表1000条限制的全面突破指南
数据库·oracle
信创天地1 小时前
从 Oracle 到国产数据库:迁移后成本直降 60%、性能反超 30% 的实战秘籍
数据库·oracle
Mikhail_G1 小时前
Mysql数据库操作指南——排序(零基础篇十)
大数据·数据库·sql·mysql·数据分析
沉舟侧畔千帆过_1 小时前
能源核心系统国产化攻坚:智能电网调度系统从 Oracle 到金仓 KES 迁移实录
数据库·oracle·能源·kingbase·金仓数据库
chengrise1 小时前
Oracle EBS 成本异常排查全指南:差异分摊、成本回滚场景与解决方案
运维·数据库·oracle·erp·ebs