Domanda

È possibile rendere dinamico il nome dello schema in una query BIRT.

Ho provato questo:

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"

Questo genera il seguente errore: I seguenti elementi presentano errori:

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

Ma il? sembra funzionare solo per la clausola where.

Devo passare lo schema come parametro e usarlo in modo dinamico perché cambia in base a dev / cat / prod

non c'è modo di generare sql fuori dal bml xml e iniettarlo in qualche modo ??

Ho fatto qualche altra ricerca sull'argomento e ho trovato questa soluzione

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

Tuttavia, indipendentemente dal numero di esempi disponibili su questo problema, l'iniezione di sql in questo modo genera solo il seguente errore.

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

Ho anche provato il reportContext.getParameterValue (" SCHEMANAME ") con gli stessi risultati.

È stato utile?

Soluzione

ARRRGH è stato un problema stupido con gli spazi !!

" FINE) COME DAYOFWEEK " + " FROM " + params [" SCHEMA "] + " .COBOL_CALENDAR " +

Aggiunta di uno spazio davanti a FROM risolto.

sbatte la testa sul display LCD.

Altri suggerimenti

Sembra che tu abbia modificato la sorgente XML del tuo rapporto. Ecco un modo più grafico di fare la sostituzione di una stringa arbitraria nella tua query SQL:

Scrivi la tua query come segue:

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

Se dev è uno schema valido, ora è possibile selezionare il set di metadati e continuare a sostituirlo con un parametro di report.

Quindi fai clic sul tuo set di dati e seleziona lo " script " Tab. Qui selezioni " prima di aprire " e inserisci il ccript sostitutivo:

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

In questo modo si sostituisce la stringa dev nel testo della query con il valore del parametro SCHEMA prima di eseguire la query. È possibile sostituire ogni stringa desiderata (linke **? ** dalla domanda, ma con uno schema valido in primo luogo è possibile utilizzare il set di metadati per la fase di progettazione. inserisci qui la descrizione dell'immagine

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top