我正在使用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。
知道为什么吗?和可能的解决方案?
答案 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
从数据库返回