DB2将大CLOB(>;32KB)强制转换为文本?

DB2将大CLOB(>;32KB)强制转换为文本?,db2,varchar,clob,Db2,Varchar,Clob,我有一个DB2(9.5.1)表,其定义如下: CREATE TABLE MY_TABLE ( ID INTEGER DEFAULT 0 NOT NULL, TEXT CLOB(104857600), PRIMARY KEY (ID) ); 现在,如果我想查询存储在CLOB中的实际文本字符串,我可以这样做: select cast(t.TEXT as varchar(32000)) from MY_TABLE t where t.ID = 1; 现在的问题是

我有一个DB2(9.5.1)表,其定义如下:

CREATE TABLE MY_TABLE 
( 
   ID INTEGER DEFAULT 0 NOT NULL, 
   TEXT CLOB(104857600), 
   PRIMARY KEY (ID) 
);
现在,如果我想查询存储在CLOB中的实际文本字符串,我可以这样做:

select cast(t.TEXT as varchar(32000))
  from MY_TABLE t
  where t.ID = 1;
现在的问题是我的文本被截断,但对于varchar,最大长度是32KB,因此此查询失败:

select cast(t.TEXT as varchar(33000))
  from MY_TABLE t
 where t.ID = 1;
是否有另一种可能,我可以检索作为文本输出的CLOB的完整内容


Peter

在类似的情况下,我必须检索xml数据,这对我很有用

select my_id, cast(xmlserialize(my_column as clob(1m)) as varchar(20000)) from schema.my_table where my_id  =  463

早些时候,我可以在squirrel sql中不使用强制转换来实现这一点,但最新版本我必须使用强制转换

,据我所知,如果您在sql选择中使用它,则无法绕过32k限制

如果使用JDBC来检索数据,而不是对结果集使用getString(),则会获得CLOB句柄,并从中获得流

另一方面,这真的是一个限制吗?你真的在where子句中使用CLOB吗。?RDBMS针对较小的行大小进行了优化,以便在事务中高效地处理


一般来说,流式传输数据。考虑重新设计你的数据模型,如果这个CURB包含可以分成多个列的数据,并且你需要在查询中的一些数据(在哪里,按顺序……等等)。

< P>我在Web上的其他地方发现了这一点,并认为当它在32 K限制范围内工作时,我会分享它。

SELECT 
  XMLCAST (
    XMLPARSE (
      DOCUMENT CAST (
        MY_CLOB_DATA AS BLOB
      ) 
      PRESERVE WHITESPACE
    ) as XML
  ) 
FROM 
MY_TABLE
WHERE ID = 1

但是你一路投给瓦查尔(20000)。这是如何处理大小>32k的varchar的?我需要用XML转换一个BLOB,这就像一个咒语,非常感谢!