2013-02-28 99 views
0

我試圖在基於處理事務的oracle SQL查詢的iReport中創建一個報表。涉及的實際表格非常冗長,與問題無關。我想創建報表時的交易金額滿足以下3個條件1,將返回結果:傳遞SQL操作符以通過iReport進行查詢參數

  • 1000.00之間和2499.99
  • 2500.00之間和9999.99
  • > = 10000.00

我想創建一個單一的選擇列表參數,運行報告的人可以在上述規範之一中進行選擇。在我實際創建參數之前,我一直試圖在SQL Developer中測試查詢。我試圖實現這個查詢的行是:

alias.transaction_amount :amountRange 

和我的測試輸入是「介於1000和9999之間」。當在查詢中進行硬編碼時,它可以正常工作,但是當我嘗試通過此輸入傳遞它時,我得到一個「無效的關係運算符」錯誤。

是否有另一種方法呢?

+2

是你的:amountRange一個字符串?你是否想爲整個表達式'1000.00到2499.99'使用單個參數?然後你需要在SQL中測試同樣的東西,看看...我對iReports瞭解不多,但是看起來你想用一些表達式來構建動態where子句,這在SQL中不起作用。在Oracle報告中有關於此的詞法參數。也許有水平。類似於你的iReports ... – Art 2013-02-28 21:58:54

+0

是的:amountRange是一個字符串,它是整個表達式。但是我看到,我認爲這不會被支持,但我認爲這值得一試,但也許iReport確實會支持這一點。 – RyHartAttack 2013-03-01 20:06:33

回答

1

嘗試使用這樣的查詢:
選擇...從表1,其中TRANSACTION_AMOUNT $ P {} paramReport

從JasperReports的終極指南:

$P{paramName} Syntax 
The parameters are used like normal java.sql.PreparedStatement parameters, using 
the following syntax: 
<queryString> 
<![CDATA[ 
SELECT * FROM Orders WHERE OrderID <= $P{MaxOrderID} ORDER BY 
ShipCountry 
]]> 
</queryString> 

$P!{paramName} Syntax 
Sometimes it is useful to use parameters to dynamically modify portions of the SQL 
query or to pass the entire SQL query as a parameter to the report-filling routines. In 
such cases, the syntax differs a little, as shown in the following example. Notice the ! 
character: 
<queryString> 
<![CDATA[ 
SELECT * FROM $P!{MyTable} ORDER BY $P!{OrderByClause} 
]]> 
</queryString> 
+0

因此,如果我要利用這種語法,我是否必須將整個where子句放在參數中?或者我可以縮小到 alias.transaction_amount $ P!{Amount_Range} ?謝謝你的迴應 – RyHartAttack 2013-03-01 20:08:53

0

與一些同事交談後,我們發現了一個更好的解決方案來解決這個問題,但我不知道我所尋找的方法是否可行,這個解決方案更直觀。

alias.transaction_amount between (CASE WHEN $P{Range} = 0 
             THEN 1000.00 
             WHEN $P{Range} = 1 
             THEN 2500.00 
             ELSE 10000.00 
             END) 
           and 
           (CASE WHEN $P{Range} = 0 
             THEN 2499.99 
             WHEN $P{Range} = 1 
             THEN 9999.99 
             ELSE 9999999.99 
             END) 

使用case語句用開關參數完美的作品,理所當然地認爲,如果有曾經爲1十億美元以上,他們將被排除在外,但最大數量可以根據需要進行調整的交易。