Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Aktualisieren der Datensatzabfrage nach Parametereingabe in BIRT

Angenommen, Sie befinden sich auf einer Oracle-DB (andere Systeme können sich anders verhalten), sollten Sie sich darüber im Klaren sein, dass eine Bind-Variable (in der JDBC-Sprache:das Fragezeichen) einen skalaren Wert ersetzen kann nur, z. ein String oder eine Zahl.

Aber Sie wollen so etwas wie eine Liste von Zahlen als Eingabe. Daher hilft Ihnen eine Bind-Variable in diesem Fall nicht weiter.

Der wahrscheinlich einfachste Weg, das zu erreichen, was Sie wollen, ist folgender:

Schreiben Sie in Ihre Abfrage:

WHERE column_name in (1) -- $REPLACE_THIS$

Beachten Sie, dass ich einen Kommentar in der Abfrage als Markierung verwende. Dann im beforeOpen der Abfrage Ereignis, ändern Sie den Abfragetext wie folgt:

// construct a comma-separated string representation of your list
// based on your report parameter (exercise left to the reader)
// var replacement = my_to_sql_csv(params["my_report_parameter"].value);

// for demonstration use:
var replacement = "1,2";

// modify the `IN` expression inside the SQL
this.queryText = this.queryText.replaceAll("(1) -- $REPLACE_THIS$", "(" + replacement + ")";

Das ist es.