Frage

Ist es möglich, die Schemanamen dynamisch in einer BIRT Abfrage zu machen.

Ich habe versucht, 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 die folgenden Fehler: Folgende Artikel haben Fehler:

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? nur scheint für die where-Klausel zu arbeiten.

Ich brauche das Schema als param passieren und verwenden dynamisch, weil es auf dev / cat / prod basierend ändert

gibt es nicht eine Möglichkeit, SQL outsite der birt xml genereate und injizieren es irgendwie ??

Ich habe zu diesem Thema einig weitere Suche und fand diese Lösung

<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 zu diesem Thema sind auf diese Weise der Injektion SQL nur die folgende Fehlermeldung generiert.

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") Route mit dem gleichen Ergebnis.

War es hilfreich?

Lösung

ARRRGH es ist ein dummes Problem mit Leerzeichen !!

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

Das Hinzufügen eines Raumes vor der FROM es festgelegt.

Pony Kopf auf dem LCD-Display.

Andere Tipps

Sieht aus wie die bearbeitete XML-Quelle des Berichts. Hier ist eine grafische Art und Weise den Austausch einer beliebigen Zeichenkette in der SQL-Abfrage zu tun:

Schreiben Sie eine Abfrage wie folgt:

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, die Meta-Daten-Set zu wählen und sind noch in der Lage mit einem Berichtsparameter zu ersetzen.

Klicken Sie dann auf Ihre Daten-Set und wählen Sie das „Skript“ Tab. Hier wählen Sie „Before“ und geben Sie den Ersatz ccript:

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

Auf diese Weise können die String dev in der Abfrage Text mit dem Wert Ihres SCHEMA ersetzen Parameter, bevor Sie die Abfrage ausführen. Sie könnten jeden String Sie wollen (linken **?** aus Ihrer Frage, aber mit einem gültigen Schema in erster Linie ersetzen können Sie die Meta-Daten-Set für die Designphase verwendet werden. eingeben Bild Beschreibung hier

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top