Merge into的使用的例子

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子句来去除一些不需要的行


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值