下面是我在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
答案 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}参数。