2011-08-02 7 views
18

私は、DB2のバージョン9.7 *を使用していますが、NOT NULL列を任意の簡単な方法でNULL可能にすることは不可能です。列を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) "データをキャプチャしているテーブルでは、カラムを削除して、NULL値を変更することはできません。"つまり、データキャプチャを変更する必要があります。 –

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_nameのDROP NOT NULL;

は、DB2 9.7以上で動作します。どのようにあなたはテーブルreorgを実行したいかもしれないのでしょうか(9.7では、db2はテーブルをreorg pendingステートに入れます、10.5 FP 5でも同じです)。

sysproc.admin_cmd( 'reorg table TABLE_NAME');

関連する問題