in
digunakan dengan collections
, jadi string input Anda terlebih dahulu harus diubah menjadi collection
(dengan memecah menjadi beberapa baris, berdasarkan pembatas koma)
Coba sesuatu seperti ini
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, '[^,]+')
)
ngomong-ngomong, org_id in ()
akan mengembalikan true
jika :input_id
adalah null
.
Pendekatan lain akan membuat seluruh kueri sebagai string terlebih dahulu dan kemudian menjalankannya dengan execute immediate
atau melalui php
. Namun ini dapat meningkatkan injeksi sql
kekhawatiran.