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.