我正在致力於通過oracle.jdbc.driver.OracleDriver
連接到Oracle數據庫的iReport 2.0.4中的報告,該報告基於工會成員身份返回條目列表。該報告將開始日期,結束日期和聯合會名稱作爲參數。查詢的基本結構是iReport 2.0.4:做字符串類型參數不適用於SQL查詢?
select
...
from
...
where
union_opt_in_dt <= $P{EndDate} and
union_opt_out_dt >= $P{StartDate} and
union_name = $P{UnionName}
...
其中StartDate
和EndDate
具有類型java.lang.Date
和UnionName
具有類型java.lang.String
。
問題是,如果我使用UnionName
參數並傳入聯合名稱(例如「AFSCME」),則查詢不會返回任何數據。如果我刪除UnionName
參數和硬編碼的工會名稱,如
where
union_opt_in_dt <= $P{EndDate} and
union_opt_out_dt >= $P{StartDate} and
union_name = 'AFSCME'
然後我得到我期待該聯盟名稱的行。
那麼爲什麼日期參數工作,但不是字符串參數?有沒有一種方法需要調用字符串參數(例如.trim()
)以使其起作用?
UPDATE,固定
找到一個答案,在另一個論壇能否解決不同的問題;我要做一個即時替換查詢參數(術語?),所以它需要
where
union_opt_in_dt <= $P{EndDate} and
union_opt_out_dt >= $P{StartDate} and
union_name = '$P!{UnionName}'
工程。不知道我理解它的邏輯(截至一週半之前,我從來沒有聽說過聽過Jasper Reports的),但至少我可以繼續前進。
修訂更新,不固定
好了,上述方案是不太我所需要的;它只會取代默認值,不一定是通過的內容。
爲什麼日期工作,但不是工會的名稱?我確定參數中的值與數據庫中的字符完全一致,字符是字符。
我試着在查詢中使用'$ P {UnionName} .trim()',但沒有快樂;我運行報告時出現語法錯誤。 – 2011-06-14 13:41:50
在將其交給報告之前,嘗試修剪「UnionName」的參數值 – 2011-06-15 08:19:49