Заполните курсор данными, используя идентификаторы, возвращенные другим курсором - PullRequest
0 голосов
/ 14 ноября 2018

Я пытаюсь заполнить курсор в хранимой процедуре записями из таблицы, используя идентификаторы, возвращаемые другой хранимой процедурой в отдельном курсоре.

Мой код выглядит примерно так (для простоты я сильно его упростил):

PROCEDURE GetAll(DataCur OUT RefCur)
AS
    IDsCursor RefCur;
    ids refs;
BEGIN

    GetAllRefs(IDsCursor);

    loop   
    fetch IDsCursor
        bulk collect into ids limit 999999999;                        

        exit when IDsCursor%NOTFOUND;      
    end loop;
    close IDsCursor;

    open DataCur for
    select 
        tbl.* 
    from 
        table(ids) ids 
        inner join myobjects tbl on 
            tbl.itemid = ids.itemid;

END;  

, где refs - это пользовательский тип таблицы.

Странная вещь в том, что это работает, когда у меня есть небольшое число ids, но когда число увеличивается (70k + в моем случае, так что немного), я получаю следующую ошибку:

enter image description here

Мои вопросы:

  1. Это действительно проблема со связью, или я делаю что-то не так? У меня никогда не было этой проблемы раньше.
  2. Есть ли другой способ достижения того, что мне нужно? Мне нужно иметь возможность повторно использовать хранимую процедуру GetAllRefs в нескольких местах, но как я могу это сделать без использования реальной таблицы?
...