我知道这句话:

create table xyz_new as select * from xyz;

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


当前回答

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

接下来使用new_table_name运行脚本

其他回答

你可以这样做 创建表New_table为select * from Old_table 但是要小心 您创建的表不像old_table那样具有任何Index、PK等。

没有表数据的复制

create table <target_table> as select * from <source_table> where 1=2;

复制表数据

create table <target_table> as select * from <source_table>;
    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; 
SELECT * INTO newtable
FROM oldtable
WHERE 1 = 0;

使用另一个表的模式创建一个新的空表。只需添加一个WHERE子句,导致查询不返回数据:

简单地写一个查询:

create table new_table as select * from old_table where 1=2;

其中new_table是要创建的新表的名称,old_table是要复制其结构的现有表的名称,这将只复制结构。