in
được sử dụng với collections
, vì vậy chuỗi đầu vào của bạn trước tiên phải được chuyển đổi thành collection
(bằng cách chia thành các hàng, dựa trên dấu phân cách bằng dấu phẩy)
Hãy thử một cái gì đó như thế này
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, '[^,]+')
)
nhân tiện, org_id in ()
này sẽ trả về true
if :input_id
là null
.
Một cách tiếp cận khác sẽ là tạo toàn bộ truy vấn dưới dạng một chuỗi trước và sau đó thực thi nó với execute immediate
hoặc thông qua php
. Tuy nhiên, điều này có thể tăng tiêm sql
những mối quan tâm.