数据库有表A,上面有索引,主键等约束,另外有一个表结构一样的B,怎样才能把表B变成表A,也就是数据是表B的,但原表A的索引,主键,外键等约束继续保留。我用rename B to A的话,表A的约束全部没有了。请教高手。不要说用truncate A,然后insert A select from B,这样太慢了。

解决方案 »

  1.   

    貌似很难,我也碰到过这种问题,
    最后rename后又重新把约束,索引,触发器挨个重新加上去。
      

  2.   

    不知道这个思路可以不,既然需要重新增加约束,索引,触发器,何不自动执行呢?DECLARE
       V_TABLENAME VARCHAR2(100):='AC02';
       V_SQL VARCHAR2(4000);
    BEGIN
        DBMS_METADATA.SET_TRANSFORM_PARAM(DBMS_METADATA.SESSION_TRANSFORM,'STORAGE',false);    SELECT DBMS_METADATA.GET_DDL('TABLE',V_TABLENAME) INTO  V_SQL   FROM DUAL;    DBMS_OUTPUT.PUT_LINE(''||'==>'||V_SQL);
    END;