2010-09-16 2 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

Смежные вопросы