in
jest używany z collections
, więc najpierw należy przekonwertować ciąg wejściowy na collection
(poprzez podział na wiersze na podstawie przecinka)
Wypróbuj coś takiego
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, '[^,]+')
)
przy okazji, ten org_id in ()
zwróci true
jeśli :input_id
jest null
.
Inne podejście byłoby najpierw skonstruować całe zapytanie jako ciąg, a następnie wykonać je za pomocą execute immediate
lub przez php
. Może to jednak spowodować wstrzyknięcie sql
obawy.