Вот процедура:
- Открытие курсора, а затем получение вывода запроса на выборку через массовый сбор.
- Проблема заключается в том, что все идентификаторы сохраняются при массовом сборе, но я не могу выполнить второй запрос выбора, используя переменную массового сбора в качестве входных данных. Он принимает во внимание только первый идентификатор вместо всех.
- OUTPUT должен быть SYS_REFCURSOR, пожалуйста, проясните, что мне здесь не хватает
тестовые данные для таблицы 1:
ID | CURRENCY | T_ID |
---|---|---|
10 | GBP | PB1 |
15 | GBP | RB |
20 | GBP | CC |
25 | AUD | DC |
На основе t_id я извлекаю соответствующие идентификаторы, а затем использую эти идентификаторы в дальнейших операторах select for цикла.
ТЕКУЩИЙ ВЫВОД ПРОЦЕССА ЧЕРЕЗ SYS_REFCURSOR:
ID | COUNTRY | ACCOUNT |
---|---|---|
10 | UK | PB1 |
ОЖИДАЕМЫЙ РЕЗУЛЬТАТ:
ID | COUNTRY | ACCOUNT |
---|---|---|
10 | UK | PB1 |
15 | Wales | RB |
20 | SH | CC |
create or replace procedure myproc (i_id in varchar2, rc out sys_refcursor)
as
cursor names_cur is
select id from table1 where currency='GBP' and t_id=i_id;
names_t names_cur%ROWTYPE;
type names_ntt is table of names_t%TYPE;
l_names names_ntt;
begin
open names_cur;
fetch names_cur bulk collect into l_names ; --Inside l_names (10,15 & 20) would be stored
close names_cur;
--iSSUE IS WITH BELOW FOR LOOP
for cur in l_names.first..l_names.last loop
open rc for --For the below select I want to iterate l_names so for the above scenario it should iterate thrice
select s.id,s.country,s.account from table2 s where s.id=l_names(cur).id;
end loop;
end myproc;
l_names
, если вы хотите вернуть курсор? Вы можете создать курсор только с запросом, и вы можете открыть его только один раз. - person William Robertson   schedule 12.03.2021