より明確にするために編集:
2009 年 1 月 28 日追加: 説明を簡単にするためにコードを単純化しすぎましたが、select ステートメントは非常に長く複雑です。挿入が作成され、2 番目の select は実際には where 句の一部として最初の挿入を調べます。
これが、ループを複数回使用する必要があり、選択を決して組み合わせない理由です。呼び出したい順序で呼び出したときにそれらを実行する必要があります。これにより、元の質問に戻ります別のカーソルでループを再利用する方法はありますか?
再度、感謝します。
私は、カーソルを作成してデータを取得する4つの異なるselectステートメント(おそらくさらに多くのステートメント)を持つパッケージ(Oracle 10)を作成しています。通常、データを取得して For ループを作成すると、すべてがうまくいきます。
私の問題は、4 つの異なる選択があることですが、カーソル c2 が c3 と c4 と同様に同じループを使用できるように、ループを再利用したいということです。これらはすべて、非常に異なる選択から異なる情報を取得するカーソルですが、ループ内のinsertステートメントを使用してすべて同じテーブルに入ります。また、すべての選択を一緒に結合することはできません。ループごとにコミットして順番に実行する必要があります
以下に 4 つのループを使用して例を作成しましたが、ご覧のとおり、すべて同じであり、唯一の違いは次のとおりです。 c1 ループの r と c2 ループの r の場合 ... ループを再利用する方法が必要だと思います。いくつかのアイデアがありましたが、どれもうまくいきませんでした。
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;