Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何将值列表传递给一个Oracle报表参数?_Sql_Oracle_Plsql_Reportbuilder_Oraclereports - Fatal编程技术网

Sql 如何将值列表传递给一个Oracle报表参数?

Sql 如何将值列表传递给一个Oracle报表参数?,sql,oracle,plsql,reportbuilder,oraclereports,Sql,Oracle,Plsql,Reportbuilder,Oraclereports,我的Oracle Report Builder中有一个参数(parameter_in),我在该报告的以下查询中使用了该参数,但结果不显示。 我的名字参数是(mhn.kod_urusan IN(替换(: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 mo

我的Oracle Report Builder中有一个参数(parameter_in),我在该报告的以下查询中使用了该参数,但结果不显示。 我的名字参数是(mhn.kod_urusan IN(替换(: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报告中有两种方法可以解决这个问题。我通常更喜欢选项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注入漏洞,以及由硬解析和多个查询计划引起的潜在性能问题


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

非常感谢jeffrey。您的回答非常有用。:)