首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > PowerDesigner >

oracle 兑现saveOrUpdate方法

2012-07-30 
oracle 实现saveOrUpdate方法在oracle 9i和更高版本中,提供了一个新的函数 merge into。通过它,我们可以实

oracle 实现saveOrUpdate方法

在oracle 9i和更高版本中,提供了一个新的函数 merge into。通过它,我们可以实现类似hibernate的saveOrUpdate的方法。

在oracle 10G则进行 了增强,可参考http://tomszrp.itpub.net/post/11835/263865
先介绍下 merge into

[code="java"]MERGE [ hint ]
INTO [ schema. ]table A

?USING [ schema. ] { table | view | subquery }?B??

ON ( condition )
?? [ merge_update_clause ]
?? [ merge_insert_clause ] ;
WHEN MATCHED THEN
UPDATE SET column = { expr | DEFAULT }
?????????? [, column = { expr | DEFAULT } ]...
[ where_clause ]
[ DELETE where_clause ]
WHEN NOT MATCHED THEN
INSERT [ (column [, column ]...) ]
VALUES ({ expr [, expr ]... | DEFAULT })
[ where_clause ]
WHERE condition
需要注意的地方:
①9i已经支持了,是Merge,但是只支持select子查询,
如果是单条数据记录,可以写作select …… from dual的子查询
②update 中不能出现 on 中的列

 MERGE INTO dl_fpgydfx A   USING (SELECT '2011-12-26' AS a,545 AS b ,545 AS c,545 AS d,545 AS e,'gc' AS f,'all' AS g FROM dual) BON ( A.RQ=B.a and A.BM=B.f and  A.SBDM=B.g) WHEN MATCHED THEN  UPDATE  set A.FENG=900  WHEN NOT MATCHED THEN  INSERT VALUES ('2011-12-26',545,332,522,241,'gc','all')

?

?该语句实现的是对于'2011-12-26',545,332,522,241,'gc','all'记录 判断在dl_fpgydfx 中是否存在,存在则update,不存在则进行插入操作。

若进行批量更新,则需要将要更新的记录放到B表里面,然后就可以实现批量更新了。

参考文章:

http://space.itpub.net/559237/viewspace-402876

?

热点排行