2011-04-11 17 views
1

在Oracle 10g數據庫中,我想製作一個現有表的副本。我希望它具有與原始表相同的數據和行。原來的桌子雖然使用了PK,所以我不知道如何複製它並保持它們的獨特性。我該如何製作PK表格的副本?

回答

3

您可以用

CREATE TABLE dummy_copy as SELECT * FROM dummy//Structure and data 

而且副本,你可以使用DBMS_METADATA.GET_DDL到得到相關的約束表 ,並與所有的檢查

SELECT dbms_metadata.get_ddl('TABLE', 'dummy') FROM DUAL; 
4

oracle將pk保留爲列約束。您必須複製表格,然後爲新表格創建此約束。

以下代碼說明如何完成工作。

-- setting up table t1 - this is just for the sake of demonstration 
    create table t1 (
     t_id integer 
     , t_data varchar2(40) 
); 
    alter table t1 modify (t_id constraint t1_pk primary key); 

    insert into t1 values (1, 'test'); 
    insert into t1 values (2, 'another test'); 
    insert into t1 values (3, 'final test'); 
    commit; 

    -- copying table t1 (definition + contents) and defining the pk 
    create table t2 as (select * from t1); 
    alter table t2 modify (t_id constraint t2_pk primary key); 

希望這有助於

最好的問候,

卡斯滕

0

或者,你可以做到這一切在一個語句創建它:

create table mike_temp_1 (
    col1, 
    col2, 
    col3, 
    col4, 
    col5, 
    constraint xpk_mike_temp_1 primary key (col1) 
) 
as select * 
from OLD_POLICY_TERM; 

我認爲指定列名的格式使用create table as select時有點繁瑣因爲我不相信你可以指定數據類型(真的很明顯),但你可以指定約束,例如not null,主鍵和外鍵。