In
используется с list of values
или subqueries
.
Вы можете преобразовать разделенные запятыми string
в subquery
, используя следующий хак:
SELECT TRIM(REGEXP_SUBSTR(temp, '[^,]+', 1, level))
FROM (SELECT :emp_id temp FROM DUAL)
CONNECT BY level <= REGEXP_COUNT(temp, '[^,]+')
Здесь строка 1,2,3
будет преобразована в строку subquery
, возвращающую 3
строк.
Итак, конечный результат для вашего случая может быть примерно таким:
SELECT e.*
FROM employee_detail e
WHERE e.emp_id in (
SELECT decode(:emp_id,null, (select e.emp_id from dual)
,TRIM(REGEXP_SUBSTR(temp, '[^,]+', 1, level)) )
FROM (SELECT :emp_id temp FROM DUAL)
CONNECT BY level <= REGEXP_COUNT(temp, '[^,]+'))
Обратите внимание, что в этом случае In
вернет true
, если :emp_id
равно null
, и это было намеренно достигнуто с помощью функции decode
.
person
Plirkee
schedule
27.06.2017