Вы можете попробовать, как говорит Олли, с Коллекциями. Я беру только вашу таблицу LEADS_DELETED.
CREATE OR REPLACE TYPE Collection_LEADS_DELETED;
CREATE OR REPLACE TYPE TypeObject_LEADS_DELETED
AS OBJECT (ID NUMBER(19));
FUNCTION your_function
RETURN Collection_LEADS_DELETED PIPELINED
IS
type t_array is table of number
index by binary_integer;
v_data t_array;
v_cont integer;
CURSOR cur_your_cursor
IS
SELECT DISTINCT LEADSEQ
FROM ASSIGNMENT
WHERE SEQID IN (SELECT ID FROM ASSIGNMENTS_DELETED);
BEGIN
v_cont := 0;
FOR i in cur_your_cursor
LOOP
v_cont := v_cont + 1;
v_data (v_cont) := i.LEADSEQ;
END LOOP;
For x in 1 .. v_data.count
loop
pipe row (TypeObject_LEADS_DELETED(v_data(x)));
end loop;
RETURN;
END your_function;
Затем вы можете вызвать эту функцию где угодно, например:
select * from table(your_function);
Если вы не можете создавать типы объектов (например, у вас нет грантов), поскольку ваши временные таблицы кажутся только массивом целых чисел, вы можете использовать только первую часть, избегая возврата чего-либо, конвейерной обработки или создания типов вне вашего процедура. В переменной v_data у вас были все желаемые идентификаторы. Вы можете использовать это, например, что-то вроде этого:
For x in 1 .. v_data.count
LOOP
insert into ASSIGNMENTS_DELETED
select SEQID FROM ASSIGNMENT
WHERE LEADSEQ IN (v_data(x))
AND SEQID NOT IN
(SELECT SEQID FROM ASSIGNMENT
WHERE ROLE = 6 AND STATUS = 8
AND CLOSINGTIME < closed);
END LOOP;