如何向一个 Oracle 报表参数传递的值的列表?

标签: sql Oracle
发布时间: 2017/4/14 23:56:53
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我有一个参数 (parameter_in) 在我 Oracle 报表生成器中,我使用此参数在以下查询在这份报告但不是显示结果。 我名称参数是(mhn.kod_urusan 中 (replace(:p_kod_urusan,'[^,]+',',')) 或︰ p_kod_urusan 是 null)这我查询:-

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

没有人有这个想法?.: (: (

解决方法 1:

有两种方法可以解决这一问题在 Oracle 的报告中。我通常更喜欢选项 #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 注入漏洞,以及潜在的性能问题引起的硬解析和多个查询计划。

我不知道为什么你将要替换的字符串 '[^,]+' 用逗号分隔。我认为你的参数已经是一个逗号分隔的值列表。

赞助商