Sql Oracle创建带有列注释的表

Sql Oracle创建带有列注释的表,sql,oracle,Sql,Oracle,是否有一种列注释语法允许我在CREATETABLE语句中声明列的位置直接指定列注释(即内联)?这本书什么也没说,有人提到了一些东西,但我没能让它发挥作用。有一种方法可以解决这个问题,但我认为注释与字段定义分离是很烦人的。我正在寻找这样的东西(不起作用): 恐怕这只能在创建表之后,使用列上的注释来完成。。。是语法。恐怕对语法的“恼人”评论是唯一的方法。SQLServer、PostgreSQL和DB2使用相同的语法(尽管据我所知,没有ANSI标准语法用于向数据库对象添加注释) MySQL支持您希望的

是否有一种列注释语法允许我在CREATETABLE语句中声明列的位置直接指定列注释(即内联)?这本书什么也没说,有人提到了一些东西,但我没能让它发挥作用。有一种方法可以解决这个问题,但我认为注释与字段定义分离是很烦人的。我正在寻找这样的东西(不起作用):


恐怕这只能在创建表之后,使用列上的
注释来完成。。。是语法。

恐怕对语法的“恼人”评论是唯一的方法。SQLServer、PostgreSQL和DB2使用相同的语法(尽管据我所知,没有ANSI标准语法用于向数据库对象添加注释)


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

解决这个恼人语法的一个方法是在Oracles SQLExplorer中查看和编辑表。它包含一个向导,允许您编辑列旁边的注释。它甚至允许轻松创建altertable脚本

编辑表时,我的过程是在向导中输入更改,而不实际执行更改,然后转到其
DDL
选项卡并从中检索SQL(作为更新,而不是完全创建脚本),然后在向导上按“取消”。然后,我将创建的SQL放入正在编写的SQL脚本中。只有当我完成脚本时,我才能执行所有操作;我从不对向导本身进行任何更改。

在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(或Toad或任何您拥有的env)中,直到您重新打开所述表的属性

类似的语法可用于注释表、索引和物化视图。[来源:


我知道MySQL和其他数据库也有类似的语法,但它不是正确的ANSI。不过它非常有用。

如果我没有弄错的话,
语法的
注释是由SQL标准定义的。@a_horse_with_no_name:我的理解是。该注释不是ANSI SQL标准的一部分,尽管其他数据库也使用它(严格地说,这并不是对我的确切问题的回答,但它很好地解决了我的问题。)向导是否创建了可以保存在项目修订控制中的迁移脚本?
-- 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'));