DB2 SQLCODE -433,SQLSTATE 22001

时间:2015-05-08 06:20:22

标签: db2 sql-pl

我在触发器中创建了一个触发器,我附加了很多varchar并创建了一个新的varchar。如果我追加太多的varchars然后我得到低于Sql异常。 (如果我追加4或5个varchar,那么我没有收到此错误)

我发现varchar最大大小是基于表空间的页面大小。我检查了我的页面大小,它的8K字节。

但我追加的内容不是8K字节。请帮我解决这个错误。

  

触发器" ORDDBA.ORD_IR_IN"中触发的SQL语句发生错误。为错误返回的信息包括SQLCODE" -433",SQLSTATE" 22001"和消息令牌"行动| AREA_UNIT | BAL_CHG_FLAG | CANCEL_DATE |" .. SQLCODE = -723,SQLSTATE = 09000,DRIVER = 3.66.46

declare columnNames varchar(5000);
SET columnNames='';
SET columnNames = 'value1' ;
SET columnNames = CONCAT(columnNames, '|') ;
SET columnNames = CONCAT(columnNames, 'value2') ;
SET columnNames = CONCAT(columnNames, '|') ;
SET columnNames = CONCAT(columnNames, 'value3') ;
SET columnNames = CONCAT(columnNames, '|') ;
SET columnNames = CONCAT(columnNames, 'value14') ;
SET columnNames = CONCAT(columnNames, '|') ;
SET columnNames = CONCAT(columnNames, 'value5') ;
SET columnNames = CONCAT(columnNames, '|') ;
SET columnNames = CONCAT(columnNames, 'value6') ;
SET columnNames = CONCAT(columnNames, '|') ;
SET columnNames = CONCAT(columnNames, 'value6') ;
SET columnNames = CONCAT(columnNames, '|') ;
SET columnNames = CONCAT(columnNames, 'value8') ;
SET columnNames = CONCAT(columnNames, '|') ;
SET columnNames = CONCAT(columnNames, 'value9') ;
SET columnNames = CONCAT(columnNames, '|') ;
SET columnNames = CONCAT(columnNames, 'value10') ;
SET columnNames = CONCAT(columnNames, '|') ;
SET columnNames = CONCAT(columnNames, 'value11') ;
SET columnNames = CONCAT(columnNames, '|') ;
SET columnNames = CONCAT(columnNames, 'value12') ;
SET columnNames = CONCAT(columnNames, '|') ;
SET columnNames = CONCAT(columnNames, 'value13') ;
SET columnNames = CONCAT(columnNames, '|') ;
SET columnNames = CONCAT(columnNames, 'value14') ;
SET columnNames = CONCAT(columnNames, '|') ;
SET columnNames = CONCAT(columnNames, 'value15') ;
SET columnNames = CONCAT(columnNames, '|') ;
SET columnNames = CONCAT(columnNames, 'value16') ;

1 个答案:

答案 0 :(得分:2)

来自你的评论:

  

如果我计算varchar中的字符数小于5000,那么DB2似乎以不同的方式计数,因此它失败了。然后我将数据类型更改为CLOB,然后其工作正常

这是因为varchar的长度以字节为单位,而clob的长度以字符(documentation)给出。

基于字符编码,单个字符可能长于一个字节。因此,并不总是可以在varchar(5000)中存储5000个字符。