2010-09-16 63 views
2

使用create table tab2 as select * from tab1;,我能夠複製數據,但不是主鍵約束:如何在SQL * Plus中複製具有所有約束的表?

SQL> desc tab1; 
Name          Null? Type 
----------------------------------------- -------- ---------------------------- 
ID          NOT NULL NUMBER 
NAME            VARCHAR2(20) 

SQL> select * from tab1; 

     ID NAME 
---------- -------------------- 
     1 A 

SQL> create table tab2 as select * from tab1; 

Table created. 

SQL> desc tab2; 
Name          Null? Type 
----------------------------------------- -------- ---------------------------- 
ID             NUMBER 
NAME            VARCHAR2(20) 

SQL> select * from tab2; 

     ID NAME 
---------- -------------------- 
     1 A 

SQL> 

我怎樣才能複製表與所有的約束呢?

回答

7

我開始像

set long 100000 
select dbms_metadata.get_ddl('TABLE', 'TAB1', '<schemaname'>) from dual 

這會返回一個create table語句TAB1(在模式< SCHEMANAME>)。您可以 然後複製該語句並將標識符TAB1更改爲TAB2。您應該確保 您也更改所有約束的名稱,因爲它們在Oracle中必須是唯一的。

最後,你會想要做一個insert into TAB2 select * from TAB1

+0

謝謝你@勒內。 – Moeb 2010-09-23 14:18:46

相關問題