如何使用PK复制表格?

时间:2011-04-11 21:13:47

标签: sql oracle oracle10g

在Oracle 10g数据库中,我想复制一个现有的表。我希望它具有与原始表相同的数据和行。原始表虽然使用了PK,但我不确定如何复制它并使它们保持唯一。

3 个答案:

答案 0 :(得分:4)

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 );

希望这有帮助,

最好的问候,

的Carsten

答案 1 :(得分:3)

您可以使用

制作副本
CREATE TABLE dummy_copy as SELECT * FROM dummy//Structure and data

您还可以使用 dbms_metadata.get_ddl 来获取表格的相关约束 并使用所有检查创建

 SELECT dbms_metadata.get_ddl( 'TABLE', 'dummy' ) FROM DUAL;

答案 2 :(得分:0)

或者您可以在一个声明中完成所有操作:

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时指定列名的格式有点繁琐,因为我不相信你可以指定数据类型(实际上很明显),但你可以指定约束,例如{{ 1}},主键和外键。