【问题标题】:How to pass a list of values to one Oracle Report parameter?如何将值列表传递给一个 Oracle Report 参数?
【发布时间】:2013-09-16 09:22:59
【问题描述】:

我的 Oracle Report Builder 中有一个参数 (parameter_in),我在此报告中的以下查询中使用此参数,但未显示结果。 我的名称参数是 (mhn.kod_urusan IN (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

有人知道吗?.:(:(

【问题讨论】:

    标签: sql oracle plsql reportbuilder oraclereports


    【解决方案1】:

    在 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 注入漏洞,以及硬解析和多个查询计划导致的潜在性能问题。

    我不确定您为什么要用逗号替换字符串 '[^,]+'。我假设您的参数已经是一个以逗号分隔的值列表。

    【讨论】:

    • 非常感谢杰弗里。你的回答很有帮助。:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-09
    • 2020-07-13
    相关资源
    最近更新 更多