Если вы хотите использовать этот тип, вы можете написать:
with t as (SELECT COLUMN_VALUE cv FROM table(EMP_LIST()))
SELECT COL_LIST FROM EMP
where emp_id in (select cv from t)
or (select count(1) from t) = 0
dbfiddle
Edit - объяснение:
with t as (SELECT COLUMN_VALUE cv FROM table(EMP_LIST()))
Эта часть называется CTE (общее табличное выражение). Обычно он используется, когда подзапрос требуется в основном запросе дважды или более, как здесь.
where emp_id in (select cv from t)
как в вашей попытке (первое использование CTE)
or (select count(1) from t) = 0
второе использование CTE . Условие WHERE
вместе позволяет нам видеть строки, которые находятся в списке, представленном в CTE или все строки , если количество предоставленных чисел равно нулю.
Вы можете сделать это без CTE, но таким образом вам пришлось определять список дважды.