2011-08-02 35 views
18

我正在使用db2版本9.7 *,似乎不可能以任何直接方式使NOT NULL列爲空。使列可爲空DB2

不幸的是,使用更開發友好的數據庫的解決方案不可用。基本上,在MySQL說話,我想這樣做(其中MY_COLUMN曾經是VARCHAR(200)NOT NULL):

ALTER TABLE MY_TABLE MODIFY COLUMN MY_COLUMN VARCHAR(200); 

回答

25

我的最終查詢結束了這樣的事:

ALTER TABLE MY_TABLE DATA CAPTURE NONE; 
ALTER TABLE MY_TABLE ALTER MY_COLUMN DROP NOT NULL; 
ALTER TABLE MY_TABLE DATA CAPTURE CHANGES; 
+1

]對於其他人在這個答案上磕磕絆絆:這是由於[SQL0270N函數不支持(原因代碼=「100」)](http://www-01.ibm.com/support/knowledgecenter/SSEPGG_9.5.0/com.ibm.db2.luw.messages.sql.doc/doc/msql00270n.html?lang = en)「刪除列,並且在任何開啓了數據捕獲的表上不允許修改可空性。」 - 這就是爲什麼數據捕獲必須改變的原因。 –

11

documentation說,ALTER TABLE必須丟棄NOT NULL

的可能性
+4

正確。我面臨的問題是數據捕獲已經開始,儘管我沒有意識到這一點,並且可能不公平地認爲DB2無法正常過度複雜化。 – lukewm

+1

非常有幫助。 :-)我在DB2環境中遇到了同樣的問題,可以在用'ALTER TABLE TABLE_NAME ALTER COLUMN COLUMN_NAME DROP NOT NULL'讀取你的答案之後解決它[ – Kaadzia

3

ALTER TABLE TABLE_NAME ALTER COLUMN COLUMN_NAME DROP NOT NULL;

適用於DB2 9.7及更高版本。你可能想要執行一個表reorg(在9.7 db2中,表格處於reorg暫掛狀態,在10.5 FP 5中也是如此):

call sysproc.admin_cmd('reorg table TABLE');