2011-08-02 31 views
18

Używam wersji db2 9.7 * i wydaje się niemożliwe, aby kolumna NOT NULL była nullowana w dowolny prosty sposób.Uczyń kolumnę nullable DB2

Niestety rozwiązanie polegające na korzystaniu z bardziej przyjaznej programistom bazy danych jest niedostępne. Zasadniczo, w MySQL mówić, chcę zrobić coś takiego (gdzie MY_COLUMN używany jako VARCHAR (200) NOT NULL):

ALTER TABLE MY_TABLE MODIFY COLUMN MY_COLUMN VARCHAR(200); 

Odpowiedz

25

Moja ostatnia kwerenda zakończyła się coś takiego:

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

Dla innych potykających się o tę odpowiedź: wynika to z [SQL0270N Funkcja nie jest obsługiwana (Kod przyczyny = "100")] (http://www-01.ibm.com/support/knowledgecenter/SSEPGG_9.5.0/com.ibm.db2.luw.messages.sql.doc/doc/msql00270n.html?lang = pl) "Upuść kolumnę i zmień pustkę, nie jest dozwolona w żadnej tabeli z przechwytywaniem danych." - dlatego przechwytywanie danych musi zostać zmienione. –

11

documentation mówi, że tabela ALTER ma możliwość upadku nie NULL

+4

Prawidłowe. Problem, z jakim miałem do czynienia, polegał na tym, że przechwytywanie danych było w toku, chociaż nie zdawałem sobie z tego sprawy i przeskoczyłem, prawdopodobnie niesprawiedliwie, do wniosku, że baza danych DB2 była nadmiernie komplikowana bez żadnego powodu. – lukewm

+1

Bardzo pomocny. :-) Miałem ten sam problem w środowisku DB2 i mogłem go rozwiązać po przeczytaniu odpowiedzi za pomocą 'ALTER TABLE TABLE_NAME ZMIENIAJ COLUMN COLUMN_NAME DROP NOT NULL' – Kaadzia

3

ALTER TABLE TABLE_NAME ALTER COLUMN COLUMN_NAME DROP NOT NULL;

działa w programie DB2 9.7 i nowszych. Jakkolwiek możesz chcieć wykonać odradzanie stołu (w 9.7 db2 umieszcza tabelę w stanie reorganizacji, tak samo w 10.5 FP 5):

zadzwoń sysproc.admin_cmd ('tabela reorganów TABLE_NAME');