2009-03-02 51 views
1

是否可以在BIRT查詢中使模式名稱動態化。BIRT 2.2動態模式名​​稱

我嘗試這樣做:

SELECT CURRENT DATE AS DATE, 
(CASE WHEN DAYOFWEEK(CURRENT DATE) = 1 THEN 'SUNDAY' 
     WHEN DAYOFWEEK(CURRENT DATE) = 2 THEN 'MONDAY' 
     WHEN DAYOFWEEK(CURRENT DATE) = 3 THEN 'TUESDAY' 
     WHEN DAYOFWEEK(CURRENT DATE) = 4 THEN 'WEDNESDAY' 
     WHEN DAYOFWEEK(CURRENT DATE) = 5 THEN 'THURSDAY' 
     WHEN DAYOFWEEK(CURRENT DATE) = 6 THEN 'FRIDAY' 
     WHEN DAYOFWEEK(CURRENT DATE) = 7 THEN 'SATURDAY' 
     END) AS DAYOFWEEK 
FROM **?**.COBOL_CALENDAR 
WHERE SERVICE_DATE = CURRENT DATE" 

這會產生以下錯誤: 下列項目有錯誤:

ReportDesign (id = 1): 
+ Cannot get the result set metadata. 
SQL statement does not return a ResultSet object. 
SQL error #1: [IBM][CLI Driver][DB2] SQL0104N An unexpected token "?" was found following "". Expected tokens may include: "(TABLE FINAL <IDENTIFIER> XMLTABLE". SQLSTATE=42601 

但?似乎只適用於where子句。

我需要通過架構一個PARAM和因爲它改變了基於開發/ CAT/PROD

動態地使用是有沒有一些方法來genereate SQL outsite BIRT的XML的,不知怎麼把它注射?

我做了一些更多的關於這個問題的搜索,發現這個解決方案

<method name="beforeOpen"><![CDATA[this.queryText = "SELECT CURRENT DATE AS DATE, "+ 
"(CASE WHEN DAYOFWEEK(CURRENT DATE) = 1 THEN 'SUNDAY'"+ 
"  WHEN DAYOFWEEK(CURRENT DATE) = 2 THEN 'MONDAY'"+ 
"  WHEN DAYOFWEEK(CURRENT DATE) = 3 THEN 'TUESDAY'"+ 
"  WHEN DAYOFWEEK(CURRENT DATE) = 4 THEN 'WEDNESDAY'"+ 
"  WHEN DAYOFWEEK(CURRENT DATE) = 5 THEN 'THURSDAY'"+ 
"  WHEN DAYOFWEEK(CURRENT DATE) = 6 THEN 'FRIDAY'"+ 
"  WHEN DAYOFWEEK(CURRENT DATE) = 7 THEN 'SATURDAY'"+ 
"  END) AS DAYOFWEEK"+ 
"FROM "+params["SCHEMA"]+".COBOL_CALENDAR"+ 
" WHERE SERVICE_DATE = CURRENT DATE";]]></method> 

但是不管有多少的例子是在那裏對這個問題以這種方式SQL注入僅生成以下錯誤。

ReportDesign (id = 1): 
+ Cannot get the result set metadata. 
SQL statement does not return a ResultSet object. 
SQL error #1: [IBM][CLI Driver][DB2] SQL0104N An unexpected token "SCHEMANAME" was found following "". Expected tokens may include: ", FROM INTO". SQLSTATE=42601 

我甚至嘗試了reportContext.getParameterValue("SCHEMANAME")路線,結果相同。

回答

2

ARRRGH這是一個愚蠢的空間問題!

「END)AS DAYOFWEEK」 + 「FROM 」+參數[「 模式」] + 「COBOL_CALENDAR」 +

在前面添加一個空間中的FROM固定它。

在液晶顯示器上的劉海頭。

0

看起來像您編輯的報告的XML源。這裏是做替換任意字符串在你的SQL查詢的更加圖形化的方式:

寫您的查詢,如下所示:

SELECT CURRENT DATE AS DATE, 
(CASE WHEN DAYOFWEEK(CURRENT DATE) = 1 THEN 'SUNDAY' 
     WHEN DAYOFWEEK(CURRENT DATE) = 2 THEN 'MONDAY' 
     WHEN DAYOFWEEK(CURRENT DATE) = 3 THEN 'TUESDAY' 
     WHEN DAYOFWEEK(CURRENT DATE) = 4 THEN 'WEDNESDAY' 
     WHEN DAYOFWEEK(CURRENT DATE) = 5 THEN 'THURSDAY' 
     WHEN DAYOFWEEK(CURRENT DATE) = 6 THEN 'FRIDAY' 
     WHEN DAYOFWEEK(CURRENT DATE) = 7 THEN 'SATURDAY' 
     END) AS DAYOFWEEK 
FROM dev.COBOL_CALENDAR 
WHERE SERVICE_DATE = CURRENT DATE 

如果dev是一個有效的架構,你現在可以選擇元數據集並且仍然能夠用報告參數替換它。

接下來點擊您的數據集並選擇「腳本」選項卡。在這裏,您選擇「beforeOpen」,並進入更新換代ccript:

this.queryText = this.queryText.replace("dev", params["SCHEMA"].value); 

這樣,你與你的SCHEMA參數你執行查詢前值替換字符串dev在你的查詢文本。你可以替換你想要的每一個字符串(linke **?**來自你的問題,但是首先有一個有效的模式,你可以使用元數據集進行設計階段) enter image description here