如何在SQL * Plus中复制具有所有约束的表?

时间:2010-09-16 09:58:42

标签: database oracle sqlplus

使用create table tab2 as select * from tab1;,我可以复制数据,但不能复制主键约束:

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> 

如何复制具有所有约束的表格?

1 个答案:

答案 0 :(得分:8)

我从

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

这将返回create table的{​​{1}}语句(在架构&lt; schemaname &gt;中)。您可以 然后复制该语句并将标识符TAB1更改为TAB2。你应该确保 您还可以更改所有约束的名称,因为它们在Oracle中必须是唯一的。

最后,您需要执行TAB1