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

oracle中两张不同结构的表(部分字段相同)数据导入
使用存储过程实现,因为我要使用job来定时执行。
有两张表A(Aid,name,age,sex,address,class,tel)和B(Bid,name,age,sex,company,salary,class)
将A表中和B表中相同的字段(字段名相同)插入到B表中。
例如A表中的数据(1,‘张三’,23,‘男’,‘北京’,‘计算机’,‘123456’)插入到B表中(null,‘张三’,23,‘男’,null,null,‘计算机’)
请问各位大神,该如果使用存储过程去实现。事先,我知道A表和B表具有相同的字段,但是我并不知道哪些字段是相同的,也就是说,需要写代码去判断两张表的相同字段。

------解决方案--------------------
SQL code

--判断名字相同字段SQL
select column_name from user_tab_columns t
 where tale_name in('A','B')
group by column_name 
 having count(1) = 2;

--按照这个sql进行for循环,把你的插入sql拼接起来就行了。
--有个小窍门,把B表的每一个字段都设置上默认值,这样找到相同的字段之后只需要
insert b(name,age....) select name,age... from a;
--其余未指定字段,为默认值。

------解决方案--------------------
游标循环
insert b(name,age....) select name,age... from a;

------解决方案--------------------
merge into
探讨

引用:
SQL code
declare
sql_txt varchar2(1000);
sql_txt_columns varchar2(1000);
begin
sql_txt := 'insert into B (';
for rec in (select t1.column_name from
(select column_name from ……
……

------解决方案--------------------
merge into 即可
------解决方案--------------------
探讨
用你的方法,我写好了,不过怎样避免重复的数据呢,比方说name字段是主键,从A导入到B时,如果name不存在则插入,如果name存在则更新B中的记录