在mysql中有这样的语法
REPLACE INTO subscribers
VALUES (2, 'John Brown', '[email protected]');
第一个字段是主键。
实现了这样的功能,如果第一个参数的值,在subscribers表中不存在,就添加记录;存在就替换记录。oracle有没有类似的语法?

解决方案 »

  1.   

    一个UPDATE不就是你的这个功能吗?
    update tablename set(id,name,addr)=(1,2,3) where id=1 and name =2 and addr=3;
      

  2.   

    哦 你还有插入操作哈那就查下MERGE INTO的用法吧  他的和你的很象
      

  3.   

    我希望用一条sql语句完成,不想创建一个表然后去执行merge
      

  4.   

    IF EXIST
    (SELECT KBS.NUFUS_MUHTARLIK.MERNIS_NO FROM KBS.NUFUS_MUHTARLIK WHERE MERNIS_NO='46603404838')
    BEGIN
    UPDATE KBS.NUFUS_MUHTARLIK SET CILT='028-01',SAYFA='25',KUTUK='6'
    END ELSE BEGIN
    INSERT INTO KBS.NUFUS_MUHTARLIK (MERNIS_NO,CILT,SAYFA,KUTUK) VALUES ('46603404838','028-01','25','6') END;
      

  5.   

    先执行UPDATE。返回值(更新件数)为0的话,执行INSERT。
      

  6.   

    MERGE INTO course c 
        USING (SELECT course_name, period, 
            course_hours 
        FROM course_updates) cu 
          ON (c.course_name = cu.course_name 
          AND c.period = cu.period) 
        WHEN MATCHED THEN 
           UPDATE 
           SET c.course_hours = cu.course_hours 
        WHEN NOT MATCHED THEN 
           INSERT (c.course_name, c.period, 
           c.course_hours) 
           VALUES (cu.course_name, cu.period, 
           cu.course_hours);
      

  7.   

    楼上的正解.
    oracle 的merge 操作 需要有 源数据(table, view,query) 和目标数据表。当然也可以士同一张表,这样 merge 的功能就和楼主说的replace 一样了。
      

  8.   

    我要插入或者更新的数据不在表中,是有程序提供的。
    而使用merge,要先将数据放到一个表中,然后再执行merge。不知道我的理解对不对,
    如果是这样,麻烦了。
    我是希望插入或者更新的操作用一条sql完成。