Oracle
 sql >> Database >  >> RDS >> Oracle

Oracle usa una stringa all'interno della condizione IN

in viene utilizzato con collections , quindi la tua stringa di input dovrebbe prima essere convertita in collection (suddividendo in righe, in base al delimitatore di virgola)

Prova qualcosa del genere

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, '[^,]+')
    )

a proposito, questo org_id in () restituirà true se :input_id è null .

Un altro approccio sarebbe costruire prima l'intera query come una stringa e quindi eseguirla con execute immediate o tramite php . Tuttavia ciò potrebbe aumentare sql injection preoccupazioni.