我知道这句话:
create table xyz_new as select * from xyz;
它复制了结构和数据,但如果我只想要结构呢?
我知道这句话:
create table xyz_new as select * from xyz;
它复制了结构和数据,但如果我只想要结构呢?
当前回答
只需使用一个where子句,它不会选择任何行:
create table xyz_new as select * from xyz where 1=0;
限制
以下内容不会被复制到新表中:
序列 触发器 索引 有些约束可能无法复制 物化视图日志
这也不能处理分区
其他回答
create table xyz_new as select * from xyz where rownum = -1;
避免反复迭代,并在1=2的条件下不插入任何内容
没有表数据的复制
create table <target_table> as select * from <source_table> where 1=2;
复制表数据
create table <target_table> as select * from <source_table>;
通过其他方式,您可以从下面列出的命令获取表创建的ddl,并执行创建。
SELECT DBMS_METADATA.GET_DDL('TYPE','OBJECT_NAME','DATA_BASE_USER') TEXT FROM DUAL
类型是表,程序等。
使用这个命令,您可以从数据库对象中获得大部分ddl。
创建表xyz_new作为select * from xyz;
——这将创建表并复制所有数据。
Delete from xyz_new;
-这将有相同的表结构,但所有复制的数据将被删除。
如果你想克服答案中指定的限制: 如何在不复制数据的情况下创建Oracle表的副本?
如果需要为EXCHANGE PARTITION创建一个表(具有空结构),最好使用“..”为了交换……”条款。不过,它只能从Oracle版本12.2开始使用。
CREATE TABLE t1_temp FOR EXCHANGE WITH TABLE t1;
如果正常的CTAS操作没有精确地复制表结构,则在“交换分区”期间无缝地处理“ORA-14097”。我看到Oracle从原始表中遗漏了一些“DEFAULT”列和“HIDDEN”列的定义。
ORA-14097: ALTER TABLE EXCHANGE中的列类型或大小不匹配 分区
进一步阅读请参阅此…