2012-05-09 92 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。不過,它非常有用。