Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Oracle usa uma string dentro da condição IN


in é usado com collections , então sua string de entrada primeiro deve ser convertida em collection (dividindo em linhas, com base no delimitador de vírgula)

Tente algo assim
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 propósito, este org_id in () retornará true if :input_id é null .

Outra abordagem seria construir a consulta inteira como uma string primeiro e depois executá-la com execute immediate ou através de php . No entanto, isso pode gerar injeção de sql preocupações.