最近接到一个新的接口需求,开发一个保存数据的接口,需要完成如下功能:有一个表T,有两个字段a(主键),b,我们想在表T中做Insert/Update,如果存在,则更新T中b的值,如果不存在,则插入一条记录。
在Microsoft的SQL语法中,很简单的一句判断就可以了,SQL Server中的语法如下:
if exists(select 1 from T where T.a=’1001’ ) update T set T.b=2 Where T.a=’1001’ else insert into T(a,b) values(‘1001’,2);
但是因为现场的数据库是Oracle,所以不能用上面的语法,那么在Oracle中我们如何实现这种功能呢?首选方案就是使用存储过程。Oracle 9i之后有一条Merge into 的语句可以同时进行Insert和Update。
merge into语法:
MERGE INTO [target-table] A
USING [source-table sql] B
ON([conditional expression] and [...]...)
WHEN MATCHED THEN
[UPDATE sql]
WHEN NOT MATCHED