我知道声明:
create table xyz_new as select * from xyz;
哪个复制结构和数据,但如果我只想要结构呢?
只需使用不会选择任何行的where子句:
create table xyz_new as select * from xyz where 1=0;
以下内容不会复制到新表中:
序列
触发器
索引
某些约束可能无法复制
物化视图日志
这也不处理分区
我使用了你接受了很多的方法,但有人指出它不会复制约束(除了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;
使用sql developer选择表并单击DDL选项卡
在sql工作表中运行它时,可以使用该代码创建一个没有数据的新表
sqldeveloper是oracle免费使用的应用程序.
如果表有序列或触发器,ddl有时也会为你生成序列或触发器.你必须要小心你的命令,并知道何时打开或关闭触发器.
create table xyz_new as select * from xyz where rownum = -1;
为了避免反复迭代并根据1 = 2的条件插入任何内容