我知道这句话:

create table xyz_new as select * from xyz;

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


当前回答

你也可以做

create table abc_new as select * from abc; 

然后截断表abc_new。希望这能满足你的要求。

其他回答

    DECLARE
    l_ddl   VARCHAR2 (32767);
BEGIN
    l_ddl      := REPLACE (
                      REPLACE (
                          DBMS_LOB.SUBSTR (DBMS_METADATA.get_ddl ('TABLE', 'ACTIVITY_LOG', 'OLDSCHEMA'))
                        , q'["OLDSCHEMA"]'
                        , q'["NEWSCHEMA"]'
                      )
                    , q'["OLDTABLSPACE"]'
                    , q'["NEWTABLESPACE"]'
                  );

    EXECUTE IMMEDIATE l_ddl;
END; 

你也可以做

create table abc_new as select * from abc; 

然后截断表abc_new。希望这能满足你的要求。

以上任务可以通过两个简单步骤完成。

步骤1:

CREATE table new_table_name AS(Select * from old_table_name);

上面的查询创建了一个表的副本(包括内容)。

若要获得结构,使用删除表的内容。

步骤2:

DELETE * FROM new_table_name.

希望这能解决你的问题。感谢之前的帖子。给了我很多启发。

使用pl/sql开发器,你可以在sql工作区或对象资源管理器中右键单击table_name,然后单击“查看”,然后单击“查看sql”,它会生成sql脚本来创建包含所有约束、索引、分区等的表。

接下来使用new_table_name运行脚本

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

避免反复迭代,并在1=2的条件下不插入任何内容