loader你是指sql loader吗?通常转库更常用的是exp/imp,那样就不需要考虑表的相关性。如果一定要用sql loader,我建议你在倒数据以前把所有表的外键disable掉,这样倒入数据的时候就不需要考虑数据相关性,倒入完成以后再把外键enable就可以。

解决方案 »

  1.   

    同意3千兄的说法!就是,泥在导数据的时候先把外键约束disable掉~
      

  2.   

    完全沒有必要這么麻煩,exp/ime不是很好用的嗎?何必要去浪費時間----而且容易疏忽而出錯。
      

  3.   

    drop table ls_tables
    /
    drop table ls_refers
    /
    create table ls_tables as 
      select t.table_name,  pk.constraint_name pkey, 9999 as listorder
      from user_tables t, 
           (select constraint_name,table_name from user_constraints where constraint_type='P') pk
      where t.temporary='N'
        and t.table_name = pk.table_name (+)
    /
    create table ls_refers as 
      select fk.table_name, fk.r_constraint_name
      from user_constraints fk
      where fk.constraint_type='R'
    /
    create index idx_ls_tables_1 on ls_tables(table_name)
    /
    create index idx_ls_refers_1 on ls_refers(r_constraint_name)
    /declare
      i number(3):=0;
    begin
      loop
        i := i+1;
        update ls_tables t set listorder=i
          where t.listorder=9999
            and not exists(select 1 from ls_refers r where r.r_constraint_name=t.pkey);
        exit when SQL%ROWCOUNT=0;
        delete ls_refers r
          where exists(select 1 from ls_tables t where t.listorder=i and t.table_name=r.table_name);
      end loop;
    end;
    /--按listorder的逆序,就是要写入的顺序;按listorder的顺序是要删除的顺序
    select * from ls_tables order by listorder desc,table_name;