字符串数据右截断DB2错误

qmb5sa22  于 12个月前  发布在  DB2
关注(0)|答案(3)|浏览(229)

当我使用这个查询时,我在db2上收到错误“String data right truncation

SELECT BILL_NUMBER, 'PAPERWORK BUT NOT COMPLETE', 'NONE', NULL, '00000',NULL,NULL,TOTAL_CHARGES, NULL FROM TLORDER WHERE 
CURRENT_STATUS NOT IN ('COMPLETE','APPRVD','PAPERWISE','BILLD','EDIBILLED','CANCL')   AND BILL_TO_CODE NOT LIKE CASE WHEN :INCLUDE_DED = 'No' THEN 'ROCD%' ELSE '1234kkh5656' END
AND EXISTS (SELECT 1 FROM LIST_CHECKIN_AUDIT A WHERE A.BILL_NUMBER = TLORDER.BILL_NUMBER FETCH FIRST 1 ROW ONLY)
AND SITE_ID = :SITE AND DELIVER_BY_END >= CURRENT TIMESTAMP - 3 MONTHS AND COALESCE(PICK_UP_DRIVER,'') = '' AND '00000' =:DRIVER_ID

字符串
但是,当我取消这一行时,我不会得到错误。

AND BILL_TO_CODE NOT LIKE CASE WHEN :INCLUDE_DED = 'No' THEN 'ROCD%' ELSE '1234kkh5656' END


提前感谢!

3lxsmp7m

3lxsmp7m1#

我冒昧地猜测,当:INCLUDE_DED主机变量的值长度超过2个字节时,就会发生这种情况。您没有提供变量的数据类型,因此查询编译器从比较的右侧派生它,其中文字'No'的长度为2个字节。如果您随后将'Yes'这样的值分配给主机变量,则必须将其截断。
考虑向主机变量引用添加显式类型信息,例如:

...WHEN CAST(:INCLUDE_DED AS VARCHAR(10)) = 'No'...

字符串
使用适合于可能值范围的数据类型。

kx7yvsdv

kx7yvsdv2#

我首先检查bill_to_code的数据类型。您返回的'1234kkh5656'可能超过了数据类型的长度。

ohfgkhjo

ohfgkhjo3#

在我的例子中,我选择了一个服务代码(int),但是通过系统中公开的API传递服务值(字符串)。
重要的是要确保传递正确的数据。

相关问题