我现在有两个oracle的库1期库和2期库,2期库在1期库的基础上每个表都添加了几个字段,现在我想把1期库的数据插入到2期库中,举个例子 1期库中有个表jjsldj,他有a1,a2,a3字段,2期库中的jjsldj有a1,a2,a3,b1字段,我写了一个语句
insert into jjsldj@2期(a1,a2,a3) selelct a1,a2,a3 from jjsldj 但由于表太多 我觉得这种方法效率太低,哪位大侠能给小弟指点一二,找个比较好的方法

解决方案 »

  1.   

    如果2期库没有数据的话,直接drop掉。然后create table jjsldj as select * from 1期用户.jjsldj; alter table jjsldj  add b1 varchar2(255);不知道这个效率如何?
      

  2.   

    简单地写个过程,然后spool出需要的sql,再执行sql,应该是最方便的途径。
      

  3.   

    我刚学oracle 还没用过spool命令,所以不明白你说得意思,能不能举个例子让我看一下,
      

  4.   


    create or replace procedure gen_user_insert_tab_sql
    is
    v_sql varchar(32767);
    cursor v_cur_columns(p_table_name in varchar2) is 
    select column_name 
      from user_tab_columns
     where table_name = p_table_name;
    begin
    for x in (select table_name from user_tables)
    loop
    v_sql := 'INSERT INTO ' || x.table_name || '@2期(';
    for col in v_cur_columns(x.table_name)
    loop
    v_sql := v_sql || col.column_name || ',';
    end loop;

    v_sql := substr(v_sql, 1, length(v_sql) - 1); --去掉最后一个逗号
    v_sql := v_sql || ') SELECT ';

    for col in v_cur_columns(x.table_name)
    loop
    v_sql := v_sql || col.column_name || ',';
    end loop;

    v_sql := substr(v_sql, 1, length(v_sql) - 1); --去掉最后一个逗号
    v_sql := v_sql || ' FROM ' || x.table_name || ';';

    dbms_output.put_line(v_sql);
    end loop;
    end;sql>set serveroutput on
    sql>spool c:\insertsql.sql
    sql>exec gen_user_insert_tab_sql
    sql>spool off
    --然后,在你的c:\的文件insertsql.sql,就有你要的sql语句了
      

  5.   

    我理解的楼主所说的效率,是指表太多,一个一个写insert sql 太麻烦。
      

  6.   

    同意楼上,我之前完成一个SQLSever版本的 呵呵      利用数据字典  嗯  同理