Merge into的使用的例子

Merge into的使用的例子Merge是一个非常有用的功能,类似于Mysql里的insertintoonduplicatekey. Oracle在9i引入了merge命令, 通过这个merge你能够在一个SQL语句中对一个表同时执行inserts和updates操作.当然是update还是insert是依据于你的指定的条件判断的,Mergeinto可以实现用B表来更新A表数据,如果A表中没有,则把B表

Merge是一个非常有用的功能,类似于Mysql里的insert into on duplicate key. 

Oracle在9i引入了merge命令, 

通过这个merge你能够在一个SQL语句中对一个表同时执行inserts和updates操作. 当然是update还是insert是依据于你的指定的条件判断的,Merge into可以实现用B表来更新A表数据,如果A表中没有,则把B表的数据插入A表. MERGE命令从一个或多个数据源中选择行来updating或inserting到一个或多个表 

语法如下 

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 ! ] 

我们先看看一个简单的例子,来介绍一个merge into的用法

        /**
	 * 更新人员的登陆次数,有匹配的记录执行更新;无匹配的记录插入新记录
	 */
	public int updateLogTimes(String userId, int times) throws SQLException {
		String strSql = 
			" merge into B_LOG_LOGIN_TIMES t1  "+
					//数据转化为一条记录
			" using (select ? userid,? times from dual) t2    "+
			" on (t1.userid = t2.userid)    "+
			" 	when matched then    "+
			"     update set t1.times = t2.times  "+		//如果该人员已经有记录,则更新
			"	when not matched then    "+
			"     insert values (t2.userid, t2.times)   ";	//如果该人员是没有记录,则新增
		return super.executeUpdate(strSql, new Object[] {userId,times });
	}

在Oracle 10g中MERGE有如下一些改进: 

1、UPDATE或INSERT子句是可选的 

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

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/37106.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注