У вас есть несколько вариантов достижения этой цели.
Если вы хотите использовать коллекцию, вы можете использовать функцию TABLE, чтобы выбрать из нее, но тип используемой коллекции становится важным.
для краткого примера, это создает тип базы данных, который представляет собой таблицу чисел:
CREATE TYPE number_tab AS TABLE OF NUMBER
/
Тип создан.
Затем следующий блок заполняет коллекцию и выполняет элементарный выбор из нее, используя ее в качестве таблицы и присоединяя ее к таблице EMP
(с некоторым выводом, чтобы вы могли видеть, что происходит):
DECLARE
-- Create a variable and initialise it
v_num_tab number_tab := number_tab();
--
-- This is a collection for showing the output
TYPE v_emp_tabtype IS TABLE OF emp%ROWTYPE
INDEX BY PLS_INTEGER;
v_emp_tab v_emp_tabtype;
BEGIN
-- Populate the number_tab collection
v_num_tab.extend(2);
v_num_tab(1) := 7788;
v_num_tab(2) := 7902;
--
-- Show output to prove it is populated
FOR i IN 1 .. v_num_tab.COUNT
LOOP
dbms_output.put_line(v_num_tab(i));
END LOOP;
--
-- Perform a select using the collection as a table
SELECT e.*
BULK COLLECT INTO v_emp_tab
FROM emp e
INNER JOIN TABLE(v_num_tab) nt
ON (e.empno = nt.column_value);
--
-- Display the select output
FOR i IN 1 .. v_emp_tab.COUNT
LOOP
dbms_output.put_line(v_emp_tab(i).empno||' is a '||v_emp_tab(i).job);
END LOOP;
END;
Из этого видно, что коллекция TYPE базы данных (number_tab) считалась таблицей и могла использоваться как таковая.
Другой вариант - просто объединить две таблицы, которые вы выбираете в своем примере:
SELECT tt.*
FROM table_two tt
INNER JOIN table_one to
ON (to.item = tt.cid);
Есть и другие способы сделать это, но первый может лучше всего удовлетворить ваши потребности.
Надеюсь, это поможет.