加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

DB2 9.5 CLOB 类型默认1M大小

(2010-11-12 15:19:42)
分类: 技术

    在做DB2的CLOB数据写入的时候,发现数据>1M以后写入就会失败,提示com.ibm.db2.jcc.a.in: DB2 SQL Error: , SQLSTATE=22001, SQLERRMC=null, DRIVER=3.52.95,意思就是说插入的值对于列来说太大。在网上搜索了一下,大家都说db2 clob最大可以存储2G的数据,我就开始看是不是自己写入clob的代码有问题,试了几种方法,都是一样的,最后才发现,原来是DB2本身的设置和表结构的问题,我是通过查看表属性发现的,我的建表脚本大概是这样的:

CREATE TABLE TEST_CLOB
 (
CLOB_DATA CLOB 

 );

建表之后,查看该表的属性,发现CLOB字段后面跟着个(1M)。后来尝试在建表语句后面加上大小,发现果然可以指定大小,比如CREATE TABLE TEST_CLOB(CLOB_DATA CLOB(3M) );再后来在网上找资料,发现在db2的安装目录下的IBM\SQLLIB\db2cli.opt文件中有下面的设置:

LOBMAXCOLUMNSIZE=1048575

上面这个值刚好是1M,建表时clob字段不指定大小时使用的就是这个默认大小。

至此,知道1M从何而来了,但是还是没能解决问题,我希望的是不限制大小,又担心如果指定了2G会浪费太大的空间,有明白人给个建议吧。

 

-------------------------------------------------------------------------------------------------

附:SQLSTATE=22001的解释:

SQL0302N  在 EXECUTE 或 OPEN 语句中的主变量值对于其相应的使用而言过大。

说明:

发现输入主变量的值对于其在 SELECT、VALUES 或预编译语句中的使用而言太大。发生了下列情况之一:
SQL 语句中使用的相应主变量或参数标记被定义为字符串,但是输入主变量包含的字符串太长。
SQL 语句中使用的相应主变量或参数标记被定义为数字,但是输入主变量包含的数值超出了范围。
C 语言以 NUL 终止的字符串主变量中丢失终止字符 NUL。
联合系统用户:在传递会话中,可能违反了特定于数据源的限制。

由于在 EXECUTE 或 OPEN 语句上的 SQLDA 中指定了不正确的主变量或不正确的SQLLEN 值,因此发生此错误。

不能处理该语句。

用户响应:

确保输入主变量值的类型和长度正确。如果输入主变量向参数标记提供值,那么使这些值与参数标记的隐含数据类型和长度相匹配。

联合系统用户:对于传递会话,请确定哪个数据源导致该错误(参阅《故障诊断
指南》以了解标识失败的数据源所要遵循的过程)。检查该数据源的 SQL 方言以
确定违反了哪个特定限制,并根据需要来调整失败的语句。

  sqlcode:  -302

  sqlstate:  22001, 22003

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有