我有一个由一些坚果头创建的表格。其中的数据不超过 varchar(100),但他已将列创建为 CLOB。
需要将其更改为 Varchar (100)。下面的查询似乎不起作用。
ALTER TABLE test alter Column VARCHAR_CLOB set data type VARCHAR(100);
它给出了以下错误
ALTER TABLE "BASE.test" specified attributes for column "VARCHAR_CLOB" that are not compatible with the existing column.. SQLCODE=-190, SQLSTATE=42837, DRIVER=4.18.60
您不能将 LOB 类型更改为非 LOB 类型,反之亦然(我在这里假设为 LUW):
http://www-01.ibm.com/support/knowledgecenter/SSEPGG_9.7.0/com.ibm.db2.luw.sql.ref.doc/doc/r0000888.html
[...] SET DATA TYPE changed-data-type 更改开始指定列的新数据类型。新数据类型必须可以从列的现有数据类型转换 (SQLSTATE 42837)。不能将 LOB 列更改为不同的数据类型 (SQLSTATE 42837)。不能将非 LOB 列更改为 LOB 数据类型 (SQLSTATE 42837)。更改结束。
一种方法是通过导出卸载数据:
然后删除所有指向该表的外键,删除表,创建新表,将数据加载回表,最后添加删除的外键。
另一种方法是删除外键,重命名表,创建新表并使用从游标加载。完成后删除重命名的表