我现在DB中存在两个表Table1(Column1,C2,C3),Table2(Column1,C4,C5),两者之间有一公共栏位Column1,
现在我想建立一个Procedure来实现以下功能,当两个表中在栏位Column1上存在相同的数据时,用Table2对Table1进行更新操作;否则,用Table2对Table1实现插入操作;请问这样的Procedure该如何写效率能高点???高人请进!!!

解决方案 »

  1.   

    不用那么麻烦
    merge就行了
      

  2.   

    UPDATE Table1 a
        SET (Column1,C2,C3) =
              (SELECT Column1,C4,C5
                 FROM Table2 b
                WHERE b.Column1=a.Column1)
     WHERE EXISTS (SELECT 1
                     FROM Table2 b
                WHERE b.Column1=a.Column1);
    update语句insert 语句
    insert into Table1 
    SELECT Column1,C4,C5
                 FROM Table2 b
                WHERE NOT EXISTS (SELECT 1
                             FROM Table1 b
                            WHERE b.Column1=a.Column1)
      

  3.   

    merge into table1  a
    using table2 b
    on(b.Column1=a.Column1)
    WHEN MATCHED THEN UPDATE SET (Column1,C2,C3)=  (Column1,C4,C5) 
    WHEN NOT MATCHED THEN INSERT VALUES (Column1,C4,C5);
      

  4.   

    二楼的兄弟的Insert SQL是不是有错误啊?感觉怪怪的!
      

  5.   

    单独的update 和insert 应该没什么大问题,调试就行了
    merge我没用过了,看到一楼说的,临时看了下,去写的
      

  6.   

    create procedure test
    as
     cursor cur is select * from table2;
      t1 table1%type;
      n int;
    begin
      open cur;
      loop
         fetch cur into t1;
         exit when cur%notfound;
           select count(*) into n from table1 where column1=t1.column1;
           if(n=0)
             begin
                 insert into table1(column1,c2,c3) values(t1.column1,t1.c4,t1.c5);
             end;
          else
             begin
                 update table1 set c2=t1.c4,c3=t1.c5 where column1=t1.column1;
             end;     
      end loop;
      close cur;
    end;好久没有摸oracle了,家里没有装oracle,没有环境可以试一下,不知能不能给楼主一点帮助.
      

  7.   

    t1 table2%rowtye;
    t1变量的声明写错了,更正一下.
      

  8.   

    merge应该可以搞定,merge就是两个表用一个条件去关联,用一个表中的数据去update另一个表中的数据,如果没有找到匹配的就insert
      

  9.   

    使用merge操作。
    如果需要定时执行,在把merge编写到存储过程就好了。
    强烈建议避免使用游标。
      

  10.   

    这正是MERGE函数所能实现的功能啊