• ベストアンサー

SQLのカーソルについて

SQLのカーソルについて質問があります。 OPEN CURSOR1; LOOP OPEN CURSOLR2; LOOP ・・・・ END LOOP; CLOSE CURSOR2; END LOOP; CLOSE CURSOR1; みたいな構文は可能ですか??? また2008というNUMBER型の数字と、4というNUMBER型数字を年月と認識させるために、TO_DATE(2008*100+4,'YYYYMM')→DATE型の200804と認識できる?? ということについて教えてください。

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

  • ベストアンサー
  • nora1962
  • ベストアンサー率60% (431/717)
回答No.2

> カーソルで定義したselect文のwhere句に該当するレコードがひと > つもないものをオープンしようとしたとき、どのような動作になりま > すか??(もしカーソルで定義した該当レコードがひとつの場合 > fetch cursor into ○○; > exit when cursor_1%notfound;でloopをぬけれますよね。) open カーソル; loop fetch カーソル into レコード; exit when カーソル%notfound; (処理) end loop とすればヒットする件数が一件もない場合 openは正常終了し、その後の「exit when ... 」で抜けます。 一件の場合は(処理)に回り、実行されます。

その他の回答 (1)

  • nora1962
  • ベストアンサー率60% (431/717)
回答No.1

可能ですが、cursor1のループの中で固定的なカーソルcursor2を開くのは、 あまり意味がないように思われます。 やるとすれば、curosr1で取得したデータをパラメータにしてcursor2を 動的カーソルにして処理を行うような場合でしょうか。 後DATE型への変換ですが以下のように行われます。 TO_DATE(2008*100+4,'YYYYMM') ↓ TO_DATE(200804,'YYYYMM') ここで数値の「200804」から文字列へ暗黙的な型変換が行われます ↓ TO_DATE('200804','YYYYMM') ↓ 2008-04-01 00:00:00

haveagolde
質問者

お礼

ありがとうございます。 >>curosr1で取得したデータをパラメータにしてcursor2を 動的カーソルにして処理を行うような場合でしょうか。 その通りです。可能ですか、ありがとうございます。 もう一点カーソルについて気になることがでてきました。 カーソルで定義したselect文のwhere句に該当するレコードがひとつもないものをオープンしようとしたとき、どのような動作になりますか??(もしカーソルで定義した該当レコードがひとつの場合fetch cursor into ○○; exit when cursor_1%notfound;でloopをぬけれますよね。)

関連するQ&A