启用数据捕获后如何在DB2中将列设置为可空

20
我正在使用db2版本9.7*,似乎无法通过任何直接的方式将非空列更改为可空列。
不幸的是,使用更适合开发人员的数据库的解决方案并不可行。基本上,用MySQL的话来说,我想做类似于这样的事情(其中MY_COLUMN曾经是VARCHAR(200)NOT NULL):
ALTER TABLE MY_TABLE MODIFY COLUMN MY_COLUMN VARCHAR(200);
3个回答

31

我的最终查询最终如下:

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

3
对于其他遇到此问题的人:这是由于SQL0270N 函数不受支持(原因代码=“100”)引起的。"在任何启用数据捕获的表上不允许删除列和更改空值属性",这就是为什么必须更改数据捕获的原因。 - David Lantos

12

文档中提到 ALTER TABLE 命令有可能用于删除 NOT NULL 约束。


4
没问题。我遇到的问题是数据捕获功能一直在运行,尽管我没有意识到这一点,因此可能有些不公正地得出结论,认为DB2被过度复杂化了而没有充分的理由。 - lukewm
1
非常有帮助。:-) 我在一个DB2环境中遇到了同样的问题,在阅读了你的答案后,我成功解决了它,只需使用 ALTER TABLE TABLE_NAME ALTER COLUMN COLUMN_NAME DROP NOT NULL 命令即可。 - Kaadzia

5

ALTER TABLE TABLE_NAME ALTER COLUMN COLUMN_NAME DROP NOT NULL;

这行代码与DB2 9.7及以上版本兼容。但是,您可能需要执行表重组(在9.7中,DB2将表置于“重组待处理”状态,在10.5 FP 5中也是如此):

调用sysproc.admin_cmd('reorg table TABLE_NAME');


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接