birt 如何实现 SQL 语句中带 in 的查询

本文介绍如何在BIRT中实现带有IN子句的复杂查询,包括通过JavaScript动态拼接SQL语句的方法,并推荐使用集算器简化这一过程。

【问题】

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

【回答】

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

BIRT 通过一个间接的方式来实现,首先在 DataSet 中定义选出所有数据的 SQL(select * from XX),然后定义参数(如 arg1,显示类型为 List Box),允许多值,最后在 DataSet 的 Script 页签下选择 beforeOpen 事件,并编写如下 JS 脚本,进行 SQL 拼接(beforeOpen 是指在数据集查询之前执行拼接 SQL):

param = reportContext.getParameterValue("arg1");
tmp = "";
for(vari=0;i<param.length;i++){
tmp += param\[i\] + ",";
}
tmp = tmp.substring(0,tmp.length-1);
this.queryText += " where id in ("\+ tmp +")";

这样才可以得到带 in 的查询的数据集,很麻烦,这还是假定 in 的内容是数值型类型,如果是字符串或日期时间类,则还要再拼上引号等,就会更麻烦了。

如果可以直接使用数组参数参与查询将会非常简单,建议使用集算器,在 SQL 中接收参数组,直接传递给 SQL 进行查询,最后将结果返回给 BIRT 的 DataSet 进行直接报表展现。

比如类似的查询在集算器中可以这样做:

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

集算器与 BIRT 可以无缝集成,和数据库一样用 JDBC 访问,可以参考【BIRT 调用 SPL 脚本

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值