Oracle创建表AS以及表注释和列注释

21 浏览
0 Comments

Oracle创建表AS以及表注释和列注释

是否有可能像CREATE TABLE AS一样创建另一个表并保留列的注释?

CREATE TABLE TABLE1_COPY AS SELECT * FROM TABLE1;

之前的语句不包括列的注释。因此,TABLE1_COPY没有列的注释。是否使用USER_COL_COMMENTS是在新创建的表中复制相同注释的唯一方法?

admin 更改状态以发布 2023年5月21日
0
0 Comments

这是以上解决方案的简易复制,不同之处在于没有用户提供。其中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”选项卡。您会得到相同的结果。
0
0 Comments

关于DMBS_METADATA.GET_DDL,它似乎不会生成COMMENT ON COLUMN语句,除非我漏了一些属性。

一种方法是使用dbms_metadata.get_dependent_ddl与dbms_metadata.get_ddl结合使用。

以下是使用SQL plus创建的示例:

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