我试图用以下方式在db2中删除一个XML列。但每次我这样做时,都会产生一个错误信息
create table One(name int, address XML);
alter table One add column age xml;
alter table One drop column age;
Error starting at line : 5 in command -
alter table One drop column age
Error report -
DB2 SQL Error: SQLCODE=-1242, SQLSTATE=42997, SQLERRMC=7, DRIVER=4.11.77
DB2的官方文档表明,这个问题在DB 9.7中得到了修复。我目前正在检查10.5 & 11.5版本,但仍然面临同样的问题。https:/www.ibm.comsupportknowledgecenterenSSEPEK_11.0.0xmlsrctpcdb2z_alterxml.html。
DB2文档建议在重新组织后对表运行CHECK pending status,但没有可用的命令。
有没有办法解决这个XML数据类型的丢列问题?或者DB2默认不允许在表中删除XML列?
谁能对这个问题提出建议?
https:/www.ibm.comsupportknowledgecenterSSEPGG_9.7.0com.ibm.db2.luw.wn.docdocc0055038.html
IBM建议在一个表中的所有XML列都需要在一条alter语句中删除。在10.5 & 更高版本的db2中,这还是一个限制吗?
这在Db2-LinuxUnixWindows中仍然是一个限制,直到并包括Db2 v11.5。
IBM指出(在SQL1242N原因代码7的帮助中)
"对于包含多列数据类型为XML的表,要么不删除任何XML列,要么使用一条ALTER TABLE语句删除表中所有XML列。
"
这个限制只适用于带有 不止一个 XML列。
你可以通过各种方式来变通,例如创建一个新的表,并将现有的数据复制到其中等等,或者以不同的方式安排你的物理数据模型。