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

Moe*_*oeb 2 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> 
Run Code Online (Sandbox Code Playgroud)

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

Ren*_*ger 9

我会从类似的东西开始

set long 100000
select dbms_metadata.get_ddl('TABLE', 'TAB1', '<schemaname'>) from dual
Run Code Online (Sandbox Code Playgroud)

这将返回(在schema < schemaname >中)的create table语句.然后,您可以复制该语句并将标识符TAB1更改为TAB2.您应确保还更改了所有约束的名称,因为它们在Oracle中必须是唯一的.TAB1

最后,你要做一个 insert into TAB2 select * from TAB1