我的Oracle Report Builder中有一个参数(parameter_in),在此报表的以下查询中使用了此参数,但未显示结果。我的名字参数是(mhn.kod_urusan IN(replace(:p_kod_urusan,'[^,] +',','))或:p_kod_urusan为空)我的查询是:-
select distinct to_char(mhn.trh_masuk,'dd/mm/yyyy') trh_masuk,
p.nama nama,mhn.kod_urusan
from mohon mhn,mohon_hakmilik mh, pemohon pm, pihak p,
hakmilik h,
kod_daerah kd,kod_bpm kb
where
mhn.id_mohon = mh.id_mohon
and mhn.id_mohon = pm.id_mohon
and pm.id_pihak = p.id_pihak(+)
and mh.id_hakmilik = h.id_hakmilik
and h.kod_daerah = kd.kod(+)
and (upper(TRUNC(mhn.trh_masuk)) BETWEEN :p_date1 AND :p_date2 )
and (mhn.kod_urusan IN (replace(:p_kod_urusan,'[^,]+',',') ) or :p_kod_urusan is null)
order by 1 asc
有人知道吗?。:( :(
您可以通过两种方法在Oracle Reports中解决此问题。我通常更喜欢选择#1。
选项1:使用INSTR比较值
and (INSTR(','||:p_kod_urusan||',', ','||mhn.kod_urusan||',') > 0
or :p_kod_urusan is null)
选项2:使用词汇参数
and (mhn.kod_urusan IN (&p_kod_urusan) or :p_kod_urusan is null)
使用选项2,您需要注意SQL注入漏洞,以及由硬解析和多个查询计划引起的潜在性能问题。
我不确定为什么'[^,]+'
要用逗号替换字符串。我假设您的参数已经是一个用逗号分隔的值列表。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句