in
est utilisé avec les collections
, donc votre chaîne d'entrée doit d'abord être convertie en collection
(en divisant les lignes, en se basant sur le séparateur virgule)
Essayez quelque chose comme ça
Select * from employ where id = 12 and org_id in (
SELECT decode(:input_id,null, (select employ.org_id from dual)
,TRIM(REGEXP_SUBSTR(temp, '[^,]+', 1, level)) )
FROM (SELECT :input_id temp FROM DUAL)
CONNECT BY level <= REGEXP_COUNT(temp, '[^,]+')
)
au fait, ce org_id in ()
renverra true
si :input_id
est null
.
Une autre approche serait de construire d'abord la requête entière sous forme de chaîne, puis de l'exécuter soit avec execute immediate
ou via php
. Cependant, cela pourrait augmenter l'l'injection SQL
préoccupations.