我有一张桌子old_table
(在oracle 10g中)
我必须将old_table的整个数据复制到new_table。
那一刻,我将使用
create table new_table
as
select * from old_table
这个命令会创建一个与old_table完全相同的表吗?
例如,如果old_table在某些列上有一些索引。
如果我使用上面的命令,那么new_table也有相同的索引?
答案 0 :(得分:1)
它只会创建具有默认设置的表和与原始表相同的结构(相同的列和列类型)。它不会创建任何索引,约束,授权,触发器和依赖于原始表的任何其他对象。
答案 1 :(得分:0)
你可以试试这个
create table new_table as select * from old_table
where 1=2;
它不会复制约束(我认为除了NOT NULL)。
如果要复制完整结构,则更高级的方法是:
SET LONG 5000
SELECT dbms_metadata.get_ddl( 'TABLE', 'MY_TABLE_NAME' ) FROM DUAL;
这将为您提供完整的创建语句文本,您可以根据需要修改该文本以创建新表。您当然必须更改表的名称和所有约束。
(您也可以使用EXP / IMP在旧版本中执行此操作,但现在它更容易。)
如果您所使用的表位于不同的架构中:
SELECT dbms_metadata.get_ddl( 'TABLE', 'MY_TABLE_NAME', 'OTHER_SCHEMA_NAME' ) FROM DUAL;