字符串数据右截断DB2错误

问题描述 投票:0回答:3

当我使用此查询时,我在 db2 上收到错误“字符串数据右截断”

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

提前致谢!

sql db2 truncate
3个回答
2
投票

我大胆猜测,当

:INCLUDE_DED
主变量的值长度超过 2 个字节时,就会发生这种情况。您不提供变量数据类型,因此查询编译器从比较的右侧派生它,其中文字
'No'
的长度为 2 个字节。如果您随后将像
'Yes'
这样的值分配给主机变量,则该值必须被截断。

考虑向主机变量引用添加显式类型信息,例如:

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

使用适合可能值范围的数据类型。


0
投票

我首先检查 bill_to_code 的数据类型。您返回的“1234kkh5656”可能超出数据类型的长度。


0
投票

在我的例子中,我选择了一个服务代码(int),但通过我们系统中公开的 API 传递服务值(字符串)。

确保传递正确的数据非常重要😅。

© www.soinside.com 2019 - 2024. All rights reserved.