我写了简单的PLSQL程序,代码如下。它生成插入字符串以输出,
如果这些适合您,您可以复制/粘贴它们并手动运行,或者您可以取消注释
行接近结束和插入将自动完成。对样本数据进行了测试,效果很好。
过程对user_tab_columns 中的列进行操作。首先,您必须在声明部分定义您感兴趣的表列表。
您可能想根据需要更改一些代码。
生成的输出:
insert into original (site, F1, F2, F3) select 1, F1, F2, F3
from TEMP1 where site = 1
insert into original (site, F2, F1, F3) select 2, F2, F1, F3
from TEMP2 where site = 1
insert into original (site, F3, F2, F1) select 3, F3, F2, F1
from TEMP3 where site = 1
程序代码:
create or replace procedure justdoit is
type t_var is table of varchar2(30);
-- table names in uppercase
tabs t_var := t_var('TEMP1', 'TEMP2', 'TEMP3');
v_sql1 varchar2(4000);
v_sql2 varchar2(4000);
begin
for i in 1..tabs.count
loop
v_sql1 := 'insert into original (site, ';
v_sql2 := 'select '||i||', ';
for o in (
select * from user_tab_columns
where table_name = tabs(i)
order by column_id)
loop
if o.column_name <> 'SITE' then
v_sql1 := v_sql1 || o.column_name||', ';
v_sql2 := v_sql2 || o.column_name||', ';
end if;
end loop;
v_sql1 := rtrim(v_sql1, ', ')||') '||rtrim(v_sql2, ', ');
v_sql1 := v_sql1||' from '||tabs(i)||' where site = 1';
dbms_output.put_line(v_sql1);
-- execute immediate v_sql1; -- <- uncomment this line
end loop;
end justdoit;