2009-03-02 9 views
1

Ist es möglich, den Schemanamen in einer BIRT-Abfrage dynamisch zu machen?BIRT 2.2 Name des dynamischen Schemas

Ich versuchte dies:

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" 

Dies erzeugt den folgenden Fehler: Folgende Artikel Fehler haben:

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 

Aber das? scheint nur für die where-Klausel zu funktionieren.

ich das Schema als param übergeben müssen und dynamisch verwenden, weil es

auf dev/cat/prod

basierend ändert, ist es nicht eine Möglichkeit, SQL outsite der birt xml genereate und es irgendwie spritzen ??

Ich habe zu diesem Thema etwas mehr suchen und diese Lösung gefunden

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

Doch unabhängig davon, wie viele Beispiele, die es gibt zu diesem Thema auf diese Weise der Injektion SQL erzeugt nur die folgende Fehlermeldung.

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 

Ich habe sogar versucht die reportContext.getParameterValue("SCHEMANAME") Strecke mit den gleichen Ergebnissen.

Antwort

2

ARRRGH es war ein dummes Problem mit Leerzeichen !!

"END) AS DAYOFWEEK" + "FROM "params + [" Schema"] + "COBOL_CALENDAR" +

einen Raum vor den daraus fixiert hinzufügen.

knallt kopf auf lcd-display.

0

Sieht so aus, als ob Sie die XML-Quelle Ihres Berichts bearbeitet haben. Hier ist eine grafische Art und Weise den Austausch einer beliebigen Zeichenkette in der SQL-Abfrage zu tun:

Schreiben Sie Ihre Abfrage wie die folgende:

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 

Wenn dev ein gültiges Schema sind Sie nun in der Lage zu wählen Der Metadatensatz kann und kann ihn durch einen Berichtsparameter ersetzen.

Als nächstes klicken Sie auf Ihren Datensatz und wählen Sie die Registerkarte "Skript". Hier wählen Sie „Before“ und geben Sie den Ersatz ccript:

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

diese Weise können Sie den String dev in der Abfrage Text mit dem Wert Ihres SCHEMA Parameter ersetzen, bevor Sie ausführen die Abfrage. Sie können jeden gewünschten String ersetzen (linke **?** von Ihrer Frage, aber mit einem gültigen Schema an erster Stelle können Sie den Meta-Datensatz für die Entwurfsphase verwenden. enter image description here

Verwandte Themen