sql - 如何将值列表传递给一个 Oracle Report 参数?

标签 sql oracle plsql reportbuilder oraclereports

我的 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 注入(inject)漏洞,以及由硬解析和多个查询计划引起的潜在性能问题。

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

关于sql - 如何将值列表传递给一个 Oracle Report 参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18756661/

相关文章:

mysql - 创建事件,但表显示空值

database - "COMPRESS FOR ALL OPERATIONS"和 "COMPRESS FOR OLTP"之间的区别?

sql - 安全检查 : How to restrict the # of rows affected in an Oracle Update/Delete query?

java - 如何从以前缀开头的表中选择值

sql - PL/SQL 使用表变量作为查询表

oracle - 在 Oracle 中从 varchar 查找下一个 id

oracle - 如何使用CLOB调用REPLACE(不超过32K)

mysql - 匹配嵌套 select 语句返回的所有行

sql - 将行 ID 添加到 Snowflake SQL 中的表

sql - oracle中有没有固定字符串长度的函数?