Jasper报告带参数的动态查询

时间:2014-09-19 18:48:35

标签: jasper-reports

下面是我在Jasper Report中运行的SQL语句。我已经弄清楚如何通过报表参数进行动态查询。我的fromDate和toDate参数工作正常。我遇到的问题是在WhereClause中添加额外的SQL并在该SQL中评估其他参数。

$ P!{userName_sql}的值是

" and u.u_username = $P{userName} "

我最终得到一个SQL错误,因为当将userName参数附加到SQL时,不会对其进行求值。我可以通过这样连接来解决这个问题:

 " and u.u_username = '" + $P{userName} + "'"

但是参数可以是SQL注入的。 有没有办法让这个参数得到评估而不必连接它?

SQL

SELECT tw.time_dt, ca.claimaudit_no,concat(u.u_firstnm, ' ', u.u_lastnm) user, ca.ca_claimtype, tw.time_workflowqueue, sum(tw.time_minutes / 60) hrs,
                    (
                                    select count(*) cnt from hcfasline hsline
                                    where hsline.hcfa_no = phases.hcfa_no
                                    union
                                    select count(*) cnt from ubdtlsline dtlsline
                                    inner join ubsline usline on usline.ubsline_no = dtlsline.ubsline_no
                                    where usline.ub_no = phases.ub_no
                                    order by cnt desc
                                    limit 1
                    ) linecnt
     FROM timeworksheet tw
    inner join users u on tw.users_no = u.users_no
    inner join claimaudit ca on tw.claimaudit_no = ca.claimaudit_no
    inner join claimauditphases phases on tw.claimauditphase_no = phases.claimauditphase_no
    where tw.time_dt between $P{fromDate} and $P{toDate}$P!{userName_sql}
    group by claimaudit_no, user, ca.ca_claimtype, tw.time_workflowqueue, tw.time_dt
    order by user, ca.ca_claimtype

1 个答案:

答案 0 :(得分:1)

我不明白为什么要将查询传递给参数来按名称过滤记录,只需创建一个参数(userName)来传递user的值。例如: -

   Where tw.time_dt between $P{fromDate} and $P{toDate} 
        and (u.u_username = $P{userName} or $P{userName} is null)

或$ P {userName}为空条件,使参数可选。

但是如果你想在参数中使用查询,那么再添加一个参数来传递用户名 $ P!{userName_sql}参数。