我在DB2中有一个列类型为CLOB的表,我想将其转换为BLOB类型。我的方法是创建一个BLOB类型的新列,将所有数据从CLOB列复制到BLOB列,删除CLOB列并重命名BLOB列。但是,我不知道如何进行第二步,即将数据从CLOB列更新到BLOB列。 DB2的功能是什么让我这样做?提前谢谢。
答案 0 :(得分:0)
当您使用Db2-LUW V11.1和AIX时,可以考虑使用存储过程 ADMIN_MOVE_TABLE 来在线完成工作。在升级到生产之前,请仔细测试开发和测试环境。 通常,使用存储过程比手动操作更容易,尤其是在学习的情况下,尽管您需要SQLADM或DBADM权限,并仔细研究文档。
一个重要的细节是,您应确保您的表将其数据,索引和LONG数据存储在单独的表空间中。无论您选择采用哪种方法,这都是最佳做法并适用。
请参阅以下位置的ADMIN_MOVE_TABLE文档: https://www.ibm.com/support/knowledgecenter/SSEPGG_11.1.0/com.ibm.db2.luw.sql.rtn.doc/doc/r0055069.html
如果您不想使用存储过程,您也可以手动执行,但您选择的方法可能会因表和平均值中的行数而有所不同-length-的-CLOB列。
对于具有小的CLOB列平均长度的微小行数:
- add the blob column with appropriate size to the table (alter table ... add column )
- populate the new column with an UPDATE statement set blobcolumn = blob(clobcolumn).
- alter table ... drop column clobcolumn
- offline reorg table
- runstats
对于非平凡的行计数或大型CLOBS
- create a new dedicated LONG tablespace if necessary
- create a new table, with the required blob column, and without the clob column, ensuring the LONG IN clause specifies correct tablespace
- declare a cursor for SELECT from oldtable , using BLOB(clobcolumn)
- use load from cursor to populate the new table
- runstats new table
- drop old table
- rename new table to be same as old table.
答案 1 :(得分:0)
您不能直接将Db2表中的列类型从CLOB更改为BLOB!
ALTER TABLE ALTER COLUMN SET DATA TYPE
语句仅允许更改以下数据类型的列:
字符
数字
二进制
答案 2 :(得分:-2)
我认为您可以直接更改Db2
表格中的列类型:
ALTER TABLE {TABLE NAME} ALTER COLUMN {COLUMN NAME} SET DATA TYPE BLOB({SIZE})
CLOB
与BLOB
非常相似,主要区别在于CLOB用于存储大文本内容(具有字符编码信息),BLOB
只是一个长二进制字符串(例如二进制文件。)