Как я могу сделать копию таблицы с ПК? - PullRequest
1 голос
/ 12 апреля 2011

В базе данных Oracle 10g я хотел бы сделать копию существующей таблицы. Мне бы хотелось, чтобы в нем были те же данные и строки, что и в исходной таблице. Хотя в оригинальной таблице используется PK, я не уверен, как его скопировать и сохранить их уникальными.

Ответы [ 3 ]

4 голосов
/ 12 апреля 2011

oracle поддерживает pk как ограничение столбца.Вы должны скопировать таблицу и затем создать это ограничение для новой таблицы.

следующий код иллюстрирует, как выполнить вашу работу.

  -- setting up table t1 - this is just for the sake of demonstration
  create table t1 (
        t_id  integer
      , t_data   varchar2(40)
  );
  alter table t1 modify ( t_id constraint t1_pk primary key );

  insert into t1 values ( 1, 'test');
  insert into t1 values ( 2, 'another test');
  insert into t1 values ( 3, 'final test');
  commit;

  -- copying table t1 (definition + contents) and defining the pk
  create table t2 as ( select * from t1 );
  alter table t2 modify ( t_id constraint t2_pk primary key );

надеюсь, это поможет,

С наилучшими пожеланиями,

Карстен

3 голосов
/ 12 апреля 2011

Вы можете сделать копию, используя

CREATE TABLE dummy_copy as SELECT * FROM dummy//Structure and data

Также вы можете использовать dbms_metadata.get_ddl , чтобы получить связанные ограничения таблицы и создать ее со всеми проверками

 SELECT dbms_metadata.get_ddl( 'TABLE', 'dummy' ) FROM DUAL;
0 голосов
/ 12 апреля 2011

Или вы можете сделать все это в одном утверждении:

create table mike_temp_1 (
  col1,
  col2,
  col3,
  col4,
  col5,
  constraint xpk_mike_temp_1 primary key (col1)
)
as select *
from OLD_POLICY_TERM;

Я думаю, что формат указания имен столбцов при использовании create table as select немного сложен, поскольку я не верю, что вы можете указывать типы данных (на самом деле это очевидно), но вы можете указать ограничения, такие как not null, первичный ключ и внешний ключ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...