Mysql
 sql >> Base de données >  >> RDS >> Mysql

Mise à jour de la requête de l'ensemble de données après la saisie des paramètres dans BIRT

En supposant que vous êtes sur une base de données Oracle (d'autres systèmes peuvent se comporter différemment), vous devez savoir qu'une variable de liaison (dans le langage JDBC :le point d'interrogation) peut remplacer une valeur scalaire uniquement, par ex. une chaîne ou un nombre.

Mais vous voulez quelque chose comme une liste de nombres en entrée. Ainsi, une variable de liaison ne vous aidera pas dans ce cas.

Le moyen le plus simple d'obtenir ce que vous voulez est probablement le suivant :

Dans votre requête, écrivez :

WHERE column_name in (1) -- $REPLACE_THIS$

Notez que j'utilise un commentaire dans la requête comme marqueur. Ensuite, dans le beforeOpen de la requête événement, modifiez le texte de la requête comme ceci :

// 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 + ")";

C'est tout.