当前位置:  开发笔记 > 数据库 > 正文

如何在不复制数据的情况下创建Oracle表的副本?

如何解决《如何在不复制数据的情况下创建Oracle表的副本?》经验,为你挑选了4个好方法。

我知道声明:

create table xyz_new as select * from xyz;

哪个复制结构和数据,但如果我只想要结构呢?



1> Jim Hudson..:

只需使用不会选择任何行的where子句:

create table xyz_new as select * from xyz where 1=0;

限制

以下内容不会复制到新表中:

序列

触发器

索引

某些约束可能无法复制

物化视图日志

这也不处理分区



这是一个很好的,干净的答案.只是想提醒一下,这将*不包括任何约束..新表甚至不会有主键.
这也不会复制序列或触发器.
只是一个附录 - 它*将*包含*一些*约束 - 即将复制任何NOT NULL约束.
新表也不会有任何索引 - 不要试图在新表上进行大查询:-)
也不处理分区.但是,嘿.
不会包含物化视图日志等

2> Dave Costa..:

我使用了你接受了很多的方法,但有人指出它不会复制约束(除了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命令分配给变量一样.ryt?例如 `new_table = dbms_metadata.get_ddl('TABLE','MY_TABLE_NAME','OTHER_SCHEMA_NAME')."同时请让我知道LONG在这里做了什么.

3> branchgabrie..:

使用sql developer选择表并单击DDL选项卡

在sql工作表中运行它时,可以使用该代码创建一个没有数据的新表

sqldeveloper是oracle免费使用的应用程序.

如果表有序列或触发器,ddl有时也会为你生成序列或触发器.你必须要小心你的命令,并知道何时打开或关闭触发器.



4> sunleo..:
create table xyz_new as select * from xyz where rownum = -1;

为了避免反复迭代并根据1 = 2的条件插入任何内容

推荐阅读
吻过彩虹的脸_378
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有