Отредактировано для лучшего уточнения:
Добавлено 28.01.09: я слишком упростил код, чтобы его было легко объяснить, но операторы выбора очень длинные и сложные, а второй зависит от первого значения после того, как первый курсор сделан и зациклен и вставки созданы, второй выбор фактически рассматривает первые вставки как часть предложения where.
Вот почему мне нужно использовать цикл более одного раза и никоим образом не комбинировать выборки.
Мне нужно, чтобы они запускались, когда я вызываю их в том порядке, в котором я хочу их вызывать, что возвращает меня к исходному вопросу: есть ли в любом случае повторное использование цикла с другим курсором?
Еще раз спасибо.
Я создаю пакет (Oracle 10), в котором у меня есть 4 различных оператора выбора (возможно, еще больше), для которых я создаю курсор и получаю свои данные. Теперь обычно я беру данные и создаю цикл For Loop, и все хорошо.
Моя проблема в том, что у меня есть 4 разных выбора, но я хочу повторно использовать цикл, чтобы курсор c2 мог использовать тот же цикл, а также c3 и c4. Все они являются курсорами, получающими различную информацию из самых разных селекторов, но все они попадают в одну таблицу с моим оператором вставки в цикле. Также я не могу объединить все выборки вместе, они должны быть выполнены в порядке с фиксацией после каждого цикла
Я создал приведенный ниже пример с 4 циклами, но, как вы можете видеть, они все одинаковые, единственное отличие состоит в следующем: для r в цикле c1, для r в цикле c2 ...
Я думаю, что должно быть что-то, чтобы повторно использовать цикл. У меня было несколько идей, ни одна из которых не сработала.
cursor c1 is select info_a, info_b from table_x where info_g = 77;
cursor c2 is select info-a, info_b from table_x where info_g = 88;
cursor c3 is select info-a, info_b from table_y where info_j = 88;
cursor c4 is select info-a, info_b from table_y where info_j = 99;
Begin
For r in c1 loop
insert into fun_table (good_info, boring_info) values (r.info_a, r.info-b);
end loop;
commit;
For r in c2 loop
insert into fun_table (good_info, boring_info) values (r.info_a, r.info-b);
end loop;
commit;
For r in c3 loop
insert into fun_table (good_info, boring_info) values (r.info_a, r.info-b);
end loop;
commit;
For r in c4 loop
insert into fun_table (good_info, boring_info) values (r.info_a, r.info-b);
end loop;
commit;
end;
Надеюсь, что это имеет больше смысла и спасибо
Я отредактировал, а затем пришли некоторые ответы .. извините.
Оригинал выглядел примерно так:
cursor c1 is select some_info, other_info from some_table where where some_thing = 'xyz';
cursor c2 is select some_info, other_info from some_table where where some_thing = 'abc';
For r in c1 loop
insert into fun_table (good_info, boring_info) values (r.some_info, r.other_info);
end loop;