我有一个表old_table (在oracle 10g中)
我必须将old_table的全部数据复制到new_table中。
在那一刻,我将使用
create table new_table
as
select * from old_table这个命令会创建一个和old_table完全一样的表吗?
例如,如果old_table在某些列上有一些索引。
如果我使用上面的命令,那么new_table也有相同的索引吗?
发布于 2015-12-10 11:38:56
它将只创建与原始表具有默认设置和相同结构(相同的列和列类型)的表。它不会创建任何索引、约束、授权、触发器和任何其他依赖于原始表的对象。
发布于 2015-12-10 11:51:29
你可以试试这个
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;这将为您提供完整的create语句文本,您可以根据需要对其进行修改以创建新表。当然,您必须更改表的名称和所有约束。
(在旧版本中也可以使用EXP/IMP完成此操作,但现在更容易了。)
如果您要查找的表位于不同的模式中:
SELECT dbms_metadata.get_ddl( 'TABLE', 'MY_TABLE_NAME', 'OTHER_SCHEMA_NAME' ) FROM DUAL;https://stackoverflow.com/questions/34193247
复制相似问题