【摘要】在MYSQL中,实现要实现在一张表中”更新一条信息,如果不存在则插入“,通常是用ON DUPLICATE KEY UPDATE实现的。举个例子,现在有个应用场景,在客户表(CUSTOMER)里添加一条数据,如果存在该客户(通过主键客户号和账号判断)则更新该客户的手机号(CUST_MOBILE)、购买次数(BUY_TIMES)和购买日期(BUY_DATE)。 客户表:CUSTOMER	N...
在MYSQL中,实现要实现在一张表中”更新一条信息,如果不存在则插入“,通常是用ON DUPLICATE KEY UPDATE实现的。举个例子,现在有个应用场景,在客户表(CUSTOMER)里添加一条数据,如果存在该客户(通过主键客户号和账号判断)则更新该客户的手机号(CUST_MOBILE)、购买次数(BUY_TIMES)和购买日期(BUY_DATE)。
客户表:CUSTOMER
NAMECODEPRIMARY
客户号CUST_NO✔\ufe0f
客户账号CUST_ACCT✔\ufe0f
客户姓名CUST_NAME
客户手机号CUST_MOBILE
购买次数BUY_TIMES
购买日期BUY_DATE
使用MYSQL ON DUPLICATE KEY UPDATE实现
insert into CUSTOMER ( CUST_NO, CUST_ACCT, CUST_NAME, CUST_MOBILE, BUY_TIMES, BUY_DATE ) values( #{CUST_NO}, #{CUST_ACCT}, #{CUST_NAME}, #{CUST_MOBILE}, '1', ${BUY_DATE} ) ON DUPLICATE KEY UPDATE CUST_MOBILE=#{CUST_MOBILE}, BUY_TIMES=BUY_TIMES+1, BUY_DATE=#{_CURR_DATE}
那么在ORACLE中,如何使用语句实现类似MYSQL中 使用ON DUPLICATE KEY UPDATE 语句的效果呢,语句如下所示
merge into CUSTMOER t1 using (select #{CUST_NO} CUST_NO,#{CUST_ACCT} CUST_ACCT from dua