in
se usa con collections
, por lo que su cadena de entrada primero debe convertirse en collection
(dividiendo en filas, según el delimitador de coma)
Prueba algo como esto
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, '[^,]+')
)
por cierto, este org_id in ()
devolverá true
si :input_id
es null
.
Otro enfoque sería construir primero la consulta completa como una cadena y luego ejecutarla con execute immediate
o a través de php
. Sin embargo, esto podría generar inyección sql
preocupaciones.