动态实现 SQL 语句中带 in 的查询

【问题】

最近弄个项目需要用到 birt,目前为止接触 birt 时间比较短。
项目中的报表比较复查。其中一个需要用到 select * from XX where id in(?) 语句。试过很多方法 发现都不能成功。 上网查找貌似也没找到什么关于这方面的资料。
具体如下:查询各个直属区域下的数据统计,传入的参数格式为 1,2,3,4 且不定长。

【回答】

BIRT 中对带 in 的查询的确比较复杂,由于 BIRT 不直接支持数组参数参与查询,即:无法把一个数组直接传给 DataSet 执行带 in 的 SQL,所以你无法直接在数据集中把 SQL 写出来。

如果以间接的方式,用 BIRT 实现带 in 的查询的数据集,需编写复杂的 JS 脚本进行 sql 拼接,且假定 in 的内容是数值型类型,很麻烦;如果是字符串或日期时间类,则还要再拼上引号等,就会更麻烦了。建议使用 SPL,可以直接使用数组参数传递给 SQL 进行查询,最后将结果返回给 BIRT 的 DataSet 进行直接报表展现,非常简单:

A
1 =db.query(“select * from XX where id in (?)”,arg1.array())
2 result A1

A1:传递数组参数,查询数据。

A2:返回查询结果。

BIRT 可以通过 JDBC 连接集算器,调用脚本方法和调用存储过程一样,详情参考【BIRT 调用 SPL 脚本​】。