IBM DB2 SQLException,带有“DB2 SQL错误:SQLCODE = -420,SQLSTATE = 22018,SQLERRMC = DECFLOAT,DRIVER = 3.66.46”

时间:2016-08-12 08:28:10

标签: db2 jasper-reports

我正在使用iReport 5.6和IBM DB2作为数据源处理Jasper报告。我将一个字符串列表作为参数传递给报告,这就是问题出现的地方。查询如下;

SELECT customers.mobile_number, 
    COALESCE(Count(DISTINCT transaction_entries.transaction_id), 0) AS 
    number_of_transactions, 
    COALESCE(Sum(Abs(transaction_entries.amount)) / 100, 0)         AS 
    volume_of_transactions 
FROM   transaction_entries 
    JOIN customers 
      ON customers.id = transaction_entries.customer_id 
WHERE  transaction_entries.transaction_type = 'Seasonal' 
    AND transaction_entries.notification_text <> 'Notification' 
    AND customers.mobile_number IN ( $p ! {listOfMobileNumbers} ) 
GROUP  BY customers.mobile_number 

当我尝试生成报告时,我收到错误引起:com.ibm.db2.jcc.am.SqlDataException:DB2 SQL错误:SQLCODE = -420,SQLSTATE = 22018,SQLERRMC = DECFLOAT,DRIVER = 3.66。 46。

知道为什么吗?和可能的解决方案?

1 个答案:

答案 0 :(得分:1)

我首先验证通过注释掉WHERE子句的最后一个谓词来避免错误;即编辑失败的语句,使得引用Jasper变量作为输入的IN谓词不再是查询的一部分。
然后,从以下查询的输出中确定定义该变量替换的内容:
select '$p ! {listOfMobileNumbers}' from sysibm.sysdummy1
如果用于揭示列表中的数据的上述查询的效果显示类似'1234,567,890'的内容,那么我建议修改定义的数据列表代替'1234','567','890'1234, 567, 890

FWiW:IMO实际的DDL [对于列或表]对于读者来说比仅仅建议更清楚:

  

mobile_number字段作为String而不是DECIMAL

从数据库返回