如果两张表的结构完全相同,那么新增的时候可以写成:
insert into a select * from b;
那么修改呢,如果想根据b表的数据来修改a表,有没有类似上面的语句啊,我的表结构上百个字段,我不想在存储过程中一个一个的使用set来完成,请各位高手帮忙,非常感谢!

解决方案 »

  1.   

    update name1 set (....)=(select .....)
    where ....
      

  2.   

    --语法
    MERGE INTO table_name alias1 
    USING (table|view|sub_query) alias2
    ON (join condition) 
    WHEN MATCHED THEN 
        UPDATE table_name 
        SET col1 = col_val1, 
            col2     = col2_val 
    WHEN NOT MATCHED THEN 
        INSERT (column_list) VALUES (column_values); 
    --实例  在一个同时存在Insert和Update语法的Merge语句中,总共Insert/Update的记录数,就是Using语句中alias2的记录数。
    MERGE INTO T T1
    USING (SELECT '1001' AS a,2 AS b FROM dual) T2
    ON ( T1.a=T2.a)
    WHEN MATCHED THEN
      UPDATE SET T1.b = T2.b
    WHEN NOT MATCHED THEN 
      INSERT (a,b) VALUES(T2.a,T2.b);--至于一张表上百个字段,好象只能一个个敲了。
      

  3.   

    oracle  tigger 触发器就可以搞定
      

  4.   

    触发器是在修改前设置好才行吧,要是用b表部分字段替换a表部分字段,而b表是从别处备份来的数据,触发器行不?
      

  5.   

    这要结合实际的业务需求场景。什么时候update,update多少,都是决定方案的主要因素。可以直接update,可以考虑重新insert,可以使用copy等等,但不确定哪一个适应你