求问: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 请高手赐教

解决方案 »

  1.   

    Oracle merge into 的用法详解实例作用:merge into 解决用B表跟新A表数据,如果A表中没有,则把B表的数据插入A表;语法: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  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
      

  2.   


    merger的是A表有的不插入,没有的将B表的数据插入。而你的则有那么多业务逻辑,完全超出了merger的应用范围啊。建议你写个存储过程来实现吧。单纯的merger into语句解决不了你的需求的。
      

  3.   

    9i好像when matched和not matched部分都要写..
    楼主可以不用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)
      

  4.   


    9i不支持单独的update和insert 
      

  5.   

    http://blog.csdn.net/inthirties/archive/2009/10/27/4731930.aspx
      

  6.   

    update p set (col1,col2,col3...col50)=(select col1,col2,col3...col50 from tp where...)
      where exists(....);
      

  7.   

    这个问题起源:我想插入数据,如果 
    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 ()