将LOB数据存储在 Db2 表格中
Db2 LOB数据与其他类型的数据处理方式不同。 因此,在定义LOB列和插入LOB数据时,有时需要采取额外的操作。
准备工作
Db2 有时会隐式创建LOB表空间、辅助表以及表或分区中每个LOB列的辅助表索引。 更多信息,请参阅 LOB表空间隐式创建。
如果 Db2 没有隐式创建LOB表空间、辅助表和辅助表索引,则必须通过发出CREATE TABLESPACE、CREATE AUXILIARY TABLE和CREATE INDEX语句来创建这些对象。
关于本任务
大型对象 和LOB 指的是 Db2 对象,可用于存储大量数据。 LOB是一个长度可变的字符串,最多可包含2GB的数据(1字节)。 Db2 支持以下LOB数据类型:
- 二进制大对象 (binary large object, BLOB)
- 使用BLOB来存储二进制数据,例如图片、语音和混合媒体。
- 字符大对象 (character large object, CLOB)
- 使用CLOB来存储SBCS或混合字符数据,例如文档。
- double-byte character large object(双字节字符大对象,DBCLOB)
- 使用DBCLOB来存储仅包含DBCS数据的数据。
有关LOB数据类型的更多信息,请参阅大型对象(LOB )。
您可以使用 Db2 来存储LOB数据,但此类数据的存储方式与其他数据不同。
虽然表中可以有LOB列,但实际的LOB数据存储在另一个表中,称为辅助表。 该辅助表存在于一个单独的表空间中,称为 LOB表空间。 每个LOB列必须有一个辅助表。 带有LOB列的表格称为基础表格。 基本表有一个ROWID列, Db2 使用该列在辅助表中定位数据。 辅助表必须有一个索引。
过程
要将LOB数据存储在 Db2 ,请完成以下步骤:
示例
假设您想在员工表中为每位员工添加简历。 员工简历大小不得超过5MB。 由于员工简历包含单字节字符,您可以将简历定义为 Db2 的CLOB。 因此,您需要在员工表中添加一列长度为5 MB的CLOB数据类型。 如果要明确定义 ROWID 列,必须在定义 CLOB 列之前定义它。
首先,执行ALTER TABLE语句添加ROWID列,然后执行另一个ALTER TABLE语句添加CLOB列。 以下语句创建这些列:
ALTER TABLE EMP
ADD ROW_ID ROWID NOT NULL GENERATED ALWAYS;
COMMIT;
ALTER TABLE EMP
ADD EMP_RESUME CLOB(5M);
COMMIT;如果您明确地为该表创建了表空间,且未将“当前规则”特殊寄存器设置为“标准”,则需要定义一个LOB表空间和一个辅助表来保存员工简历。 您还需要在辅助表上定义一个索引。 您必须在同一数据库中定义关联基本表的LOB表空间。 以下语句创建这些对象:
CREATE LOB TABLESPACE RESUMETS
IN DSN8D12A
LOG NO
COMMIT;
CREATE AUXILIARY TABLE EMP_RESUME_TAB
IN DSN8D12A.RESUMETS
STORES DSN8C10.EMP
COLUMN EMP_RESUME;
CREATE UNIQUE INDEX XEMP_RESUME
ON EMP_RESUME_TAB;
COMMIT;您可以将员工的简历发送至 Db2。 在应用程序中,您可以定义一个主变量来保存简历,将简历数据从文件中复制到主变量中,然后执行UPDATE语句将数据复制到 Db2。 虽然LOB数据存储在辅助表中,但您的UPDATE语句指定了基础表的名称。 以下代码用C语言声明了一个用于存储简历的主变量:
SQL TYPE is CLOB (5M) resumedata;以下UPDATE语句将数据复制到 Db2 :UPDATE EMP SET EMP_RESUME=:resumedata
WHERE EMPNO=:employeenum;在此语句中, employeenum 是一个标识与简历关联的员工的主变量。