DB2 或 POSTGRES 数据源 ? is null 报错的解决办法

 

为空查全部

润乾报表中参数值为空时查询所有数据的一般写法是? is null,而此处的? 代表一个参数。

但是在一些特定的数据库中,不支持? is null 的写法,比如 db2 数据库和 postgres 数据库,如果使用 db2 数据库作为数据源,使用? is null 的写法就会报错。

而去掉? is null 的条件后就可以正常浏览数据,可见是? is null 这个语句的问题。

而对于此类情况的? is null 有以下三种比较方便的解决办法:

解决办法 1:

在数据集的 sql 里面用 cast(? as varchar(10)) is null 代替? Is null 把这个 varchar 改成数据库中的类型,DB2 数据库就可以支持了,就可以正常的浏览数据了

imagepng

解决办法 2:

把数据集的 sql 语句写成 SELECT * FROM test where id in (?) or ?=’!EOF’的形式,然后在对应的第二个参数处 (也就是第二个?) 写成 if(arg1==null,”!EOF”,”!EMF”)即可。

imagepng

解决办法 3:

使用动态参数传值,为空时不传这个参数
参数设定:arg1 和 arg2
如下图所示:

imagepng

arg2 表达式为: if(@arg1=="" || @arg1==null,""," and name='"+@arg1+"'")
sql:select * from test where 1=1 ${arg2}
arg2 为宏传值方式

如果使用 db2 作为数据源,而查询数据的时候又想实现当参数为空的时候查询全部数据,就可以采用上面三个办法实现需求了。