Как продублировать таблицу со всеми ее ограничениями в SQL * Plus? - PullRequest
2 голосов
/ 16 сентября 2010

Используя 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 Ответ

8 голосов
/ 16 сентября 2010

Я бы начал с чего-то вроде

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

. Это возвращает оператор create table для TAB1 (в схеме <<em> имя_схемы >).Затем вы можете скопировать этот оператор и изменить идентификатор TAB1 на TAB2.Вам также следует убедиться, что вы также изменили имена всех ограничений, поскольку они должны быть уникальными в Oracle.

Наконец, вы захотите сделать insert into TAB2 select * from TAB1

...