Oracle
 sql >> Base de données >  >> RDS >> Oracle

Oracle utilise une chaîne dans la condition IN

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.