sql >> Base de Datos >  >> RDS >> Oracle

Oracle usa una cadena dentro de la condición IN

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.