• ベストアンサー

PL/SQLカーソルの2重FORループができません

こんにちは。 PL/SQLで下記のようなFORループを 2重3重に処理することはできないのでしょうか? コンパイル時に PLS-00103: 記号"END"が見つかりました と、内ループの"END"に対して起こられてしまいます。 お分かりになる方、よろしくお願いします。 … <<L_OUT>> FOR data_a IN csr_a LOOP  … <<L_IN>> FOR data_b IN csr_b LOOP  END LOOP L_IN;  … END LOOP L_OUT; …

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

カーソルのOPEN/CLOSEを明示するなら、問題はないと思います。 しかしながら、csr_a,csr_bを結合した1つのカーソルの 読み出しに変えた方が、より効率的かと思います。

pink_tomato
質問者

お礼

ご回答有難うございました。 問題点はほかにあったようで、 いろいろと修正しているうちに、問題は解決しました。

その他の回答 (3)

回答No.4

こんにちは。 LOOP文のネストは問題ありませんよ。 全体をコピペして載せて頂いた方がいいかと思いますが・・・? (^^ゞ

pink_tomato
質問者

お礼

ご回答有難うございました。 問題点はほかにあったようで、 いろいろと修正しているうちに、問題は解決しました。

  • cucsna
  • ベストアンサー率23% (12/51)
回答No.2

半分くらい、トンチンカンなことを書くと思いますが、ご容赦ください。 可能性として、 ・ENDが全角文字になっている ・ENDの直前の文に「;」がついていない ・必要ないENDがどこかに存在する ということを考えました。 全く確認などしていませんし、多分違うと思いますが、 いろいろ考える選択肢があった方がいいと思って書き込みました。 ロジック的には、ループの中で、さらにループを作っても問題はないと思います。(多分)

pink_tomato
質問者

お礼

ご回答有難うございました。 問題点はほかにあったようで、 いろいろと修正しているうちに、問題は解決しました。

回答No.1

文法云々より、考え方に問題があるような気がします。 外側のFORループのカーソルcsr_aで得られるレコード数分、 内側のFORループのカーソルcsr_bを読み直すということに なりますが、それがお望みなのですか?

pink_tomato
質問者

補足

csr_aで取得したレコードをcsr_bのwhere句の変数にしているので、ロジック的な問題はありません。 FORループの入れ子にではなくて、 外はFORループで、 内をOPEN/FETCH/CLOSEと通常の書き方にしたら うまくいくのでしょうか? (明日、会社へ行くまでちょっと試せないのですが・・・)

関連するQ&A