3

Oracle Report Builder に 1 つのパラメーター (parameter_in) があり、このレポートの次のクエリでこのパラメーターを使用していますが、結果が表示されません。私の名前のパラメーターは (mhn.kod_urusan IN (replace(:p_kod_urusan,'[^,]+',',') ) または :p_kod_urusan is 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

誰でもアイデアを得ましたか?.:(:(

4

1 に答える 1

4

Oracle Reports でこれを解決するには、2 つの方法があります。私は通常、オプション#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 インジェクションの脆弱性に注意する必要があります。また、ハード解析と複数のクエリ プランによって引き起こされる潜在的なパフォーマンスの問題にも注意する必要があります。

'[^,]+'文字列をコンマに置き換えている理由がわかりません。パラメータはすでにコンマ区切りの値のリストであると想定しています。

于 2013-09-18T03:21:30.320 に答える