我在触发器中创建了一个触发器,我附加了很多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') ;
答案 0 :(得分:2)
来自你的评论:
如果我计算varchar中的字符数小于5000,那么DB2似乎以不同的方式计数,因此它失败了。然后我将数据类型更改为CLOB,然后其工作正常
这是因为varchar
的长度以字节为单位,而clob
的长度以字符(documentation)给出。
基于字符编码,单个字符可能长于一个字节。因此,并不总是可以在varchar(5000)
中存储5000个字符。