日期:2014-05-17  浏览次数:21246 次

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

------解决方案--------------------
--语法
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);

--至于一张表上百个字段,好象只能一个个敲了。
------解决方案--------------------
这要结合实际的业务需求场景。什么时候update,update多少,都是决定方案的主要因素。

可以直接update,可以考虑重新insert,可以使用copy等等,但不确定哪一个适应你