当我使用这个查询时,我在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
型
提前感谢!
3条答案
按热度按时间3lxsmp7m1#
我冒昧地猜测,当
:INCLUDE_DED
主机变量的值长度超过2个字节时,就会发生这种情况。您没有提供变量的数据类型,因此查询编译器从比较的右侧派生它,其中文字'No'
的长度为2个字节。如果您随后将'Yes'
这样的值分配给主机变量,则必须将其截断。考虑向主机变量引用添加显式类型信息,例如:
字符串
使用适合于可能值范围的数据类型。
kx7yvsdv2#
我首先检查bill_to_code的数据类型。您返回的'1234kkh5656'可能超过了数据类型的长度。
ohfgkhjo3#
在我的例子中,我选择了一个服务代码(int),但是通过系统中公开的API传递服务值(字符串)。
重要的是要确保传递正确的数据。