2011-08-02 170 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'選項卡。你會得到相同的結果。