2009-03-02 13 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としてスキーマを渡し、それが変化するため、DEV /猫/ PROD

は、BIRTのXMLのoutsite SQLをgenereateし、何とかそれを注入するいくつかの方法がありませんに基づいて動的に使用する必要があります?

私はいくつかは、より被写体に検索を行なったし、しかしかかわらずのみ、次のエラーを生成しますどのように多く、このように、この問題注入するSQLにそこにいる例のこのソリューション

<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> 

を見つけました。

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 ARRRGHはスペースが愚かな問題でした。

+ paramsは[ "SCHEMA "] +" FROM" "DAYOFWEEK AS END)" + "COBOL_CALENDAR" +

固定そこからの前にスペースを追加します。

lcdディスプレイ上のbangs head。

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