DB2SQLCODE-433,SQLSTATE22001

DB2SQLCODE-433,SQLSTATE22001,db2,sql-pl,Db2,Sql Pl,我已经创建了一个触发器,在触发器中我添加了很多varchar并创建了一个新的varchar。若我附加了太多的varchar,那个么我将得到低于Sql的异常。(如果我附加4或5个varchar,那么我不会得到这个错误) 我发现varchar的最大大小是基于表空间的页面大小。我已经检查了我的页面大小,它是8K字节 但是我附加的内容不是8K字节。请帮我解决这个错误 触发器“ORDDBA.ORD_IR_in”中触发的SQL语句出错。返回的错误信息包括SQLCODE“-433”、SQLSTATE“2200

我已经创建了一个触发器,在触发器中我添加了很多varchar并创建了一个新的varchar。若我附加了太多的varchar,那个么我将得到低于Sql的异常。(如果我附加4或5个varchar,那么我不会得到这个错误)

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

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

触发器“ORDDBA.ORD_IR_in”中触发的SQL语句出错。返回的错误信息包括SQLCODE“-433”、SQLSTATE“22001”和消息标记“ACTION | AREA | u UNIT | BAL | u CHG | u FLAG | CANCEL |”。。SQLCODE=-723,SQLSTATE=09000,DRIVER=3.66.46

根据您的评论:

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

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


基于字符编码,单个字符可能长于一个字节。因此,在
varchar(5000)

中存储5000个字符并不总是可能的,这是用于DB2还是oracle的?如果它是DB2,那么您的标签应该是SQLPL而不是PLSQLSQL,这是针对DB2数据库的。现在,您的错误消息提示您正在传递与泛型
value1
不同的值,等等。您是否将超过5000个字符传递到列名中?是的,mmmmm pie,您是正确的,如果我计算varchar中的字符数小于5000,那么DB2的计数方式似乎不同,因此它失败了。然后,我将数据类型更改为CLOB,然后工作正常:)
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') ;