如何在BIRT报告设计中传递参数后更改或更新数据集的查询?
详图:
我的查询看起来像这样:
WHERE ?
该参数标记可以包含不同的值,在用户输入参数之后,它将如下所示:
WHERE column_name = 1
或
WHERE column_name = 2
甚至
WHERE column_name IN (1,2)
我为该数据集参数(DSP)创建了一个报告参数(RP),在尝试了几个小时之后,我无法改变它。
我试过了:
由于
答案 0 :(得分:3)
假设您使用的是Oracle数据库(其他系统的行为可能不同),您应该知道绑定变量(在JDBC语音中:问号)只能替换标量值,例如:字符串或数字。
但是你想要像数字 list 这样的东西作为输入。 因此,在这种情况下,绑定变量不会帮助您。
实现你想要的最简单的方法可能就是:
在您的查询中,写下:
WHERE column_name in (1) -- $REPLACE_THIS$
请注意,我在查询中使用注释作为标记。
然后,在查询的beforeOpen
事件中,修改查询文本,如下所示:
// 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 + ")";
那就是它。