2016-08-12 1148 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

相關問題