IBM DB2 SQLException“DB2 SQL错误:SQLCODE = -420,SQLSTATE = 22018,SQLERRMC = DECFLOAT,DRIVER = 3.66.46”
问题描述:
我正在使用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。
任何想法为什么?和可能的解决方案?
答
我会首先验证通过注释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
根据https://www.ibm.com/support /knowledgecenter/SSEPEK_10.0.0/codes/src/tpc/n420.html如果有人询问有关错误消息,则您的错误是“字符串变量的值不能接受函数名称函数”。 – Bobby
我已经看到那个页面,并没有得到详细的信息。 mobile_number字段作为字符串从数据库返回,而不是DECIMAL。 – Yassem
也许'mobile_number'是一个非字符串字段,你传递的是字符串? – tobi6