在Oracle 10g数据库中,我想复制一个现有的表。我希望它具有与原始表相同的数据和行。原始表虽然使用了PK,但我不确定如何复制它并使它们保持唯一。
答案 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}},主键和外键。