求问:9i中只想更新不想插入怎么写?
MERGE INTO user p
USING TEMP tp
ON (p.TYPE = tp.TYPE)
WHEN MATCHED THEN
UPDATE SET p.SYS_NAME= tp.SYS_NAME
WHEN NOT MATCHED THEN
INSERT ()
VALUES ()
这样写肯定不对
去掉WHEN NOT MATCHED THEN 也不对,
哪位大哥有好的办法?
这个问题起源:我想插入数据,如果
1、TYPE 不重复则插入
2、TYPE 重复的 还要看 另一个字段 “op” 如果op有值 则不进行操作
3、如果op没值则进行更新如果是10g就简单了直接 where 就行了 可怜的是客户的是9i 请高手赐教
MERGE INTO user p
USING TEMP tp
ON (p.TYPE = tp.TYPE)
WHEN MATCHED THEN
UPDATE SET p.SYS_NAME= tp.SYS_NAME
WHEN NOT MATCHED THEN
INSERT ()
VALUES ()
这样写肯定不对
去掉WHEN NOT MATCHED THEN 也不对,
哪位大哥有好的办法?
这个问题起源:我想插入数据,如果
1、TYPE 不重复则插入
2、TYPE 重复的 还要看 另一个字段 “op” 如果op有值 则不进行操作
3、如果op没值则进行更新如果是10g就简单了直接 where 就行了 可怜的是客户的是9i 请高手赐教
merge into a
using (select id,name from b ) c
on(a.id=c.id )
when matched then update set a.name=c.name
when not matched then insert (a.id,a.name) values (c.id,c.name);
作用:利用表 b 跟新表a ,条件是a.id=b.id,如果a表中没有该条件的数据就插入。如果你的数据量很大,此sql效率非常高。
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/tianlesoftware/archive/2009/10/23/4714921.aspx
merger的是A表有的不插入,没有的将B表的数据插入。而你的则有那么多业务逻辑,完全超出了merger的应用范围啊。建议你写个存储过程来实现吧。单纯的merger into语句解决不了你的需求的。
楼主可以不用merge intoupdate p set sys_name=(select sys_name from tp where type=p.type)
where exists(select 1 from tp where type=p.type)
9i不支持单独的update和insert
where exists(....);
1、TYPE 不重复则插入
2、TYPE 重复的 还要看 另一个字段 “op” 如果op有值 则不进行操作
3、如果op没值则进行更新 貌似你的这3点只要加个where条件就OK了?
MERGE INTO user p
USING TEMP tp
ON (p.TYPE = tp.TYPE)
WHEN MATCHED THEN
UPDATE SET p.SYS_NAME= tp.SYS_NAME
where p.op is null
WHEN NOT MATCHED THEN
INSERT ()
VALUES ()