oracle中的replace into使用及说明

 更新时间:2024年06月20日 17:00:48   作者:闰土和猹。  
这篇文章主要介绍了oracle中的replace into使用及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

oracle中的replace into

Mybaitis foreach批量insert以及配合oracle merge into函数,批量update和insert

oracle中相当于mysql的replace into函数:merge into

  • 因为作者使用国产的神通数据库 写法与oracle相同 没办法使用mysql的replace into实现插入
  • 使用merge into来代替 不太推荐使用这个 能不用尽量不用吧

使用方法

普通使用

  • xml中
<update id="mergeStudents" parameterType="com.alibaba.dto.StudentDTO">
		merge into t_student a
		using
		(
			SELECT
			#{id} as id,
			#{name} as name,
			#{age} as age
			FROM dual
		) b
		on (
		a.id= b.id
		)
		when matched then
		UPDATE SET
		a.name= b.name,
		a.age=b.age
		when not matched then
		INSERT(
		a.id,
		a.name,
		a.age
		) VALUES(
		b.id,
		b.name,
		b.age
		)
	</update>

加上foreach

<update id="mergeStudents" parameterType="com.alibaba.dto.StudentDTO">
		merge into t_student a
		using
		(
		<foreach collection="stus" item="item" index="index" open=""
				 close="" separator="union all">
			SELECT
			#{item.id,jdbcType=VARCHAR} as id,
			#{item.name,jdbcType=VARCHAR} as name,
			#{item.age,jdbcType=VARCHAR} as age
			FROM dual
		</foreach>
		) b
		on (
		a.id= b.id
		)
		when matched then
		UPDATE SET
		a.name= b.name,
		a.age=b.age
		when not matched then
		INSERT(
		a.id,
		a.name,
		a.age
		) VALUES(
		b.id,
		b.name,
		b.age
		)
	</update>

弊端:

mybatis会报一个解析不了的语法错误 但不影响实际结果 解决办法暂未发现

com.alibaba.druid.sql.parser.ParserException: syntax error, error in :'merge into

也算mybatis的bug吧 没有update与insert都兼容的标签

用oracle的merge实现mysql的replace into

mysql

mysql有一个replace into的dml语句,类似insert,但是会在insert之前检查表的唯一索引或主键。如果存在,就改为update操作。

这在很多应用中是一个很常用的操作。有了这个replace into ,就可以将一个 select后判断后做update or insert改为一句话,甚是方便。

Oracle

Oracle9i引入了MERGE命令,你能够在一个SQL语句中对一个表同时执行inserts和upda tes操作. MERGE命令从一个或多个数据源中选择行来updating或inserting到一个或多个表.在Oracle 10g中MERGE有如下一些改进:

1、UPDATE或INSERT子句是可选的

2、UPDATE和INSERT子句可以加WHERE子句

3、在ON条件中使用常量过滤谓词来insert所有的行到目标表中,不需要连接源表和目标表

4、UPDATE子句后面可以跟DELETE子句来去除一些不需要的行

5、源表就是using关键字后面跟的表,目标表就是将要被merge into的表

6、merge into 中所有的update、insert、delete都是针对目标表来操作的。由于merge into已经制定了操作的表,所以update、insert、delete都不需要再显示指出表名

作用:merge into 解决用B表跟新A表数据,如果A表中没有,则把B表的数据插入A表;

语法

MERGE INTO [your table-name] [rename your table here]  
USING ( [write your query here] )[rename your query-sql and using just like a table]  
ON ([conditional expression here] AND [...]...)  
WHEN MATHED THEN [here you can execute some update sql or something else ]  
WHEN NOT MATHED THEN [execute something else here ! ]  

sql demo

如下所示:

merge into qq a  
using (select '2022' company_no, 'cname' company_name from qq where rownum<2) b  
on (a.company_no = b.company_no)  
WHEN MATCHED THEN  
  UPDATE SET a.company_name = a.company_name|| 'a'  
WHEN NOT MATCHED THEN  
  INSERT  
    (a.company_no, a.company_name)  
  VALUES  
    (b.company_no, b.company_name);  

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 使用PLSQL远程连接Oracle数据库的方法(内网穿透)

    使用PLSQL远程连接Oracle数据库的方法(内网穿透)

    Oracle数据库来源于知名大厂甲骨文公司,是一款通用数据库系统,能提供完整的数据管理功能,而Oracle数据库时关系数据库的典型代表,其数据关系设计完备,这篇文章主要介绍了使用PLSQL远程连接Oracle数据库的方法(内网穿透),需要的朋友可以参考下
    2023-03-03
  • oracle10g全文索引自动同步语句使用方法

    oracle10g全文索引自动同步语句使用方法

    这篇文章主要介绍了oracle10g全文索引自动同步语句使用方法,需要的朋友可以参考下
    2014-03-03
  • Oracle DBA常用语句

    Oracle DBA常用语句

    Oracle DBA常用语句,对于表空间大小等查看都是不错的sql语句。
    2009-08-08
  • Oracle数据库常见字段类型大全以及超详细解析

    Oracle数据库常见字段类型大全以及超详细解析

    在Oracle数据库中查询特定表的字段个数通常需要使用SQL语句来完成,这篇文章主要介绍了Oracle数据库常见字段类型大全以及超详细解析,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2025-04-04
  • Oracle递归查询connect by用法

    Oracle递归查询connect by用法

    本文详细讲解了Oracle递归查询connect by的用法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-05-05
  • 提升Oracle用户密码安全性的策略

    提升Oracle用户密码安全性的策略

    最近遇到这样的客户需求,数据库中有很多业务用户名,客户期望密码设置不要过于简单,最起码别和用户名一致或相似就好。怎么解决这个需求呢?下面小编给大家带来了提升Oracle用户密码安全性的策略,感兴趣的朋友一起看看吧
    2018-04-04
  • oracle存储过程创建表分区实例

    oracle存储过程创建表分区实例

    二种oracle存储过程创建表分区实例
    2013-11-11
  • 装Oracle用PLSQL连接登录时不显示数据库的解决

    装Oracle用PLSQL连接登录时不显示数据库的解决

    这篇文章主要介绍了装Oracle用PLSQL连接登录时不显示数据库的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-11-11
  • Oracle to_char函数的使用方法

    Oracle to_char函数的使用方法

    在Oracle数据库中,to_char函数是我们最常用的函数之一,下文对to_char函数的应用作了详细的介绍,如果您感兴趣的话,不妨一看
    2014-08-08
  • oracle 触发器 实现出入库

    oracle 触发器 实现出入库

    出库入库这样的功能在许多系统中都有。可能叫法不一。有的可能是数量,有的可能是金额。我这里以金额为例 实现出库入库也有许多方法,一种是用语言实现,一种是用触发器实现。它们各有千秋。
    2009-07-07

最新评论