2016-08-12 1118 views
-2

我正在使用iReport 5.6和IBM DB2作为数据源的Jasper报告。我将一串字符串作为参数传递给报告,这就是问题出现的地方。查询如下;IBM DB2 SQLException“DB2 SQL错误:SQLCODE = -420,SQLSTATE = 22018,SQLERRMC = DECFLOAT,DRIVER = 3.66.46”

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

根据https://www.ibm.com/support /knowledgecenter/SSEPEK_10.0.0/codes/src/tpc/n420.html如果有人询问有关错误消息,则您的错误是“字符串变量的值不能接受函数名称函数”。 – Bobby

+0

我已经看到那个页面,并没有得到详细的信息。 mobile_number字段作为字符串从数据库返回,而不是DECIMAL。 – Yassem

+0

也许'mobile_number'是一个非字符串字段,你传递的是字符串? – tobi6

回答

1

我会首先验证通过注释WHERE子句的最后一个谓词避免错误;即对有问题的语句进行编辑,使得引用Jasper变量作为输入的IN谓词不再是查询的一部分。
然后,确定什么定义变量替换,从下列查询的输出:
select '$p ! {listOfMobileNumbers}' from sysibm.sysdummy1
如果上面的查询,用于揭示在列表数据的影响,提出了类似'1234,567,890',然后我将建议修改定义列表以反映'1234','567','890'1234, 567, 890的数据。

FWIW:IMO实际DDL [列(一个或多个)或TABLE]比表明仅仅是更加清晰到读取器:

The mobile_number field is returned from the database as a String and not a DECIMAL

相关问题