【问题标题】:How to convert a blob column type clob to blob in db2如何在 db2 中将 blob 列类型 clob 转换为 blob
【发布时间】:2018-08-05 01:22:24
【问题描述】:

我在 DB2 中有一个列类型为 CLOB 的表,我想将其转换为 BLOB 类型。我这里的方法是创建一个 BLOB 类型的新列,将所有数据从 CLOB 列复制到 BLOB 列,删除 CLOB 列并重命名 BLOB 列。但是,我不确定如何执行第二步,即将数据从 CLOB 列更新到 BLOB 列。 DB2 的什么功能可以让我这样做?提前致谢。

【问题讨论】:

  • 什么是 Db2 服务器操作系统(z/os、i 系列、linux/unix/windows)以及什么是 Db2 版本?
  • 我正在使用 DB2 版本 11.1.2.2 和 oslevel 7.1.0.0

标签: db2 db2-luw


【解决方案1】:

我认为您可以直接更改Db2 表中的列类型:

ALTER TABLE {TABLE NAME} ALTER COLUMN {COLUMN NAME} SET DATA TYPE BLOB({SIZE})

CLOBBLOB 非常相似,主要区别在于CLOB 用于存储大文本内容(具有字符编码信息),BLOB 只是一个长二进制字符串(例如二进制文件)。

【讨论】:

  • 不幸的是,我的 DB2 数据库不允许我这样做。 Alter 语句失败,原因是新列类型与现有列不兼容。
【解决方案2】:

当您在 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

如果您不想使用存储过程,也可以手动进行,尽管您选择的方法可能会根据表中的行数平均长度而有所不同-of-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.

【讨论】:

  • 谢谢毛。是的,我也可以使用 CAST 函数来执行此操作。现在我有另一个要求,我该如何做相反的事情,即将 BLOB 列类型转换为 CLOB。看起来上面的步骤对它不起作用。
  • 对新问题使用新问题,因此不要在评论线程中提出新问题。考虑将答案标记为正确或赞成的有用答案。
  • 谢谢毛。因为我发现它很有用,所以我赞成你的回答
【解决方案3】:

您不能直接将 Db2 表中的列类型从 CLOB 更改为 BLOB! ALTER TABLE ALTER COLUMN SET DATA TYPE 语句仅允许更改以下数据类型的列: 特点 数字 二进制

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-10-02
    • 1970-01-01
    • 1970-01-01
    • 2018-07-15
    • 2013-12-15
    • 2019-04-12
    • 1970-01-01
    • 2013-05-09
    相关资源
    最近更新 更多