2011-08-02 135 views
6

是否可以创建另一个表作为CREATE TABLE AS并保留列的注释?Oracle创建表AS和表注释和列注释


CREATE TABLE TABLE1_COPY AS SELECT * FROM TABLE1;

前面的语句不包括列的意见。因此TABLE1_COPY没有列的注释。是否仅仅使用USER_COL_COMMENTS在我新创建的表格上重现相同的评论?

+0

请参阅:http://stackoverflow.com/questions/233870/how-can-i-create-a-copy-of-an-oracle-table-without-copying-the-data看起来类似,并已答案也是 –

+0

至于DMBS_METADATA.GET_DDL它似乎并没有生成COMMENT ON COLUMN语句,除非我缺少一些属性。 – reforrer

+5

那么,正确的方法是去你的* source控制库*,为TABLE1取一个DDL脚本的副本并编辑该副本。 – APC

回答

12

至于DMBS_METADATA.GET_DDL它似乎并不genereate COMMENT ON COLUMN语句,除非我错过了一些属性。

的一种方法是结合使用dbms_metadata.get_dependent_ddl与DBMS_METADATA.GET_DDL

下面是使用SQL加上创建的示例:

SQL> set long 1000000 

SQL> create table t (x number); 

Table created. 

SQL> comment on column T.X IS 'this is the column comment'; 

Comment created. 

SQL> comment on table T IS 'this is the table comment'; 

Comment created. 

SQL> SELECT dbms_metadata.get_ddl('TABLE', 'T') || ' ' || 
    2   dbms_metadata.get_dependent_ddl('COMMENT', 'T', USER) the_ddl 
    3 FROM dual 
    4/

THE_DDL 
-------------------------------------------------------------------------------- 

    CREATE TABLE "SCOTT"."T" 
    ( "X" NUMBER 
    ) SEGMENT CREATION DEFERRED 
    PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING 
    TABLESPACE "USERS" 

    COMMENT ON COLUMN "SCOTT"."T"."X" IS 'this is the column comment' 

    COMMENT ON TABLE "SCOTT"."T" IS 'this is the table comment' 
+0

dbms_metadata.get_dependent_ddl是完美的。谢谢! – reforrer

0

这是上述溶液的副本在一个简单的方法,区别在于没有USER提供。 TABLE_NAME是现有的表格。

SELECT dbms_metadata.get_ddl('TABLE','TABLE_NAME') || ' ' || dbms_metadata.get_dependent_ddl('COMMENT', 'TABLE_NAME') the_ddl FROM dual; 

如果您正在使用“的Oracle SQL Developer”,上面的查询是没有必要的,因为你可以直接得到从“SQL”选项卡本身的结果查询。 步骤是 -

  1. 单击要复制的表格。
  2. 在右侧面板上,转到'SQL'选项卡。你会得到相同的结果。