2012-05-09 63 views
10

是否有列注释语法,允许我在创建表语句(即内联)中声明列时直接指定列注释? 11g spec没有提到任何东西,在another page提到的东西,但我不能得到它的工作。有一种方法来specify comments after creating the table,但我认为这是令人讨厌的评论是从字段定义分开。我期待这样的事情(不工作):Oracle创建包含列注释的表

create table whatever (
field number(15,0) primary key comment 'primary key generated from sequence pkseq', 
... 
) 

回答

14

恐怕“烦人的”COMMENT ON语法是这样做的唯一方法。 SQL Server,PostgreSQL和DB2使用相同的语法(尽管据我所知,没有用于向数据库对象添加注释的ANSI标准语法)。

MySQL支持您希望它工作的方式。我同意这将是一个更好的机制,但根据我的经验,很少有人会使用评论,我怀疑Oracle会不会改变它。

+0

如果我没有弄错,'COMMENT ON'语法是由SQL标准定义的。 –

+1

@a_horse_with_no_name:我的理解是。该评论是*不是* ANSI *标准的一部分,尽管其他数据库确实使用它 – APC

5

恐怕就只能创建表后进行的,使用comment on column ... is ''语法。

4

解决这个令人讨厌的语法的方法还是查看和编辑ORACLE SQLExplorer中的表。它包含一个向导,允许您编辑列旁边的注释。它甚至可以轻松创建alter table脚本。

我编辑表格的过程是在没有实际执行它们的情况下在向导中输入更改,然后转到其DDL选项卡并从那里检索SQL(作为更新,而不是完整的创建脚本)并在向导上按取消。然后我将创建的SQL放入我正在写的SQL脚本中。只有当我完成脚本时,我才会执行一切;我不会对向导本身做任何改变。

+0

(严格来说,这不是我的确切问题的答案,但它解决了我的痛苦,很好地解决了这个问题。) –

+0

该向导是否创建了可以保存在项目修订控制中的迁移脚本? – Roboprog

+0

@Roboprog当然 - 我对此延伸了答案。 –

0

上的sqlplus(或相似)测试,但语法如下:

-- assuming you have privileges 
COMMENT ON COLUMN SCHEMA1.TABLE1.COL1 
    IS 'My comment' 

-- then you can double check like this 
SELECT * FROM all_col_comments WHERE 
    (OWNER, TABLE_NAME, COLUMN_NAME) 
    IN (('SCHEMA1','TABLE1','COL1')); 

注意,评论将现在的SQLDeveloper显示(或蟾蜍或任何env中你有),直到重新打开说表的属性。

类似的语法可用于注释表,索引和物化视图。 [来源:https://docs.oracle.com/cd/B19306_01/server.102/b14200/statements_4009.htm]

我知道类似的语法存在MySQL和其他人,但它不是正确的ANSI。不过,它非常有用。