2014-02-05 27 views
1

我有一個(半)基礎數據立方體建立與國家和地區的級聯參數。狀態選擇框與區域一樣直線前進;當用戶選擇一個狀態時,區域選項會相應地設置。然而,對於區域的值是將被髮送到將同時使用PARAMS(國家和字符串從區域列表)幾個時間mysql的select語句字符串的一個長長的清單。它是一個醜陋的UNION大集合。我的問題是之前的開始和查詢時間之間的某處。BIRT之前打開值列表PARAMS錯誤

//beforeOpen script...LState & LAreas the name of the report param 
this.queryText = this.queryText.replace('stateList', params["LStates"].value); 
this.queryText = this.queryText.replace('areaList', params["LAreas"].value); 


In my mysql statement I use them in the following way: 
SELECT ..XXX.. 
FROM ..XXX.. 
WHERE ..XXX.. 
State.State_Location in ('stateList') 
AND Range_Locator.Range in ('areaList') 
UNION ALL 
SELECT ..XXX.. 
FROM ..XXX.. 
WHERE ..XXX.. 
State.State_Location in ('stateList') 
AND Range_Locator.Range in ('areaList') 

兩個錯誤,我從BIRT得到的是:

(很明顯)

  • 無法獲得結果集。 org.eclipse .... SQL語句不會返回ResultSet對象。

(不那麼明顯,我)

  • 一個BIRT出現異常。評估Javascript表達式時出錯。腳本引擎錯誤:找不到方法java.lang.String.replace(string.java.lang.Object [])。 有錯誤評估腳本 「this.queryText = this.queryText.replace( 'stateList',則params [」 LStates 「]值。); this.queryText = this.queryText.replace( 'areaList',則params [」 LAreas」 ]。值);」

任何想法?任何幫助將不勝感激。

回答

3

看來LStates被定義爲「多值」參數,因此PARAMS [「LStates」]值返回值的數組:這就是爲什麼這種方法替換不起作用。

你應該嘗試這樣的:

this.queryText = this.queryText.replace('stateList', params["LStates"].value.join("','")); 
+0

這救了我:join(「','」)); –

0

我不清楚自己在beforeOpen腳本在做什麼,而是你的SQL是尋找字符串值「stateList」 &「areaList」和可能是不()開心。您需要使用問號來調用您在數據集設計中設置的「參數」中定義的參數。

SELECT ..XXX.. 
FROM ..XXX.. 
WHERE ..XXX.. 
State.State_Location in ? 
AND Range_Locator.Range in ? 
UNION ALL 
SELECT ..XXX.. 
FROM ..XXX.. 
WHERE ..XXX.. 
State.State_Location in ? 
AND Range_Locator.Range in ? 

我不記得使用

in ? 

在有任何疑問,我通常會嘗試將其設置爲使用

like ? 

有問題數在發送選擇題參數SQL通過BIRT。你可能想看看How do I set a parameter to a list of values in a BIRT report?也有一些安全問題。當我必須對多個數據進行篩選時,我通常在SQL運行後通過篩選器(數據集設計選項)進行篩選。如果你的SQL返回很多值,就認爲這可能是一個資源問題。

0

感謝您的回覆,但由於我無法獲得這些選項的工作,我結束了重構數據庫& sql語句運行更好。要解決以前的一些建議:

@dom states參數只有一個值,而使用「IN('stateList')」是不高效的(免責聲明,不是我的代碼)添加。join(',')確實拋出了一個特定的錯誤;我試過,mysql/BIRT似乎期待逗號分隔列表,但得到了一個尾隨逗號的字符串。

@詹姆斯我嘗試使用問號(?),而不是「stateList」 &「areaList」,但我認爲MySQL的/ BIRT是無法識別哪個值與問號......也不太清楚,雖然去了因爲我無法很好地進行調試並找出原因。可能是一個param映射問題的表單,我沒有注意到。謝謝您的幫助。