• 締切済み

PL/SQLのOPEN cursor_name FOR文でCLOSEは必要?

お世話になります、 Orcacleのストアドで質問があります。 以下のようなストアドを組んだ場合「Close cu1;」は必要なのでしょうか? カーソルをクローズしないとOracleエラー「カーソルが最大数を超えました。。。」というエラーが出るそうなのですが。 ちなみにClose cu1;を入れるとVBからストアドを呼んだ場合に 以下のOracleエラー 「ORA-01403:データがありません」のエラーが出てしまいます。 アドバイス等、よろしくお願いします。 CREATE OR REPLACE PACKAGE MASTERS as CURSOR c1 IS select * from userTable; TYPE type1 IS REF CURSOR RETURN c1%ROWTYPE; PROCEDURE GetD( cu1 OUT type1); end; / -- CREATE OR REPLACE PACKAGE BODY MASTERS IS PROCEDURE GetD( cu1 OUT type1) IS BEGIN OPEN cu1 FOR select * from userTable ; これが必要?→ Close cu1; END GetD; END MASTERS; /

みんなの回答

  • MarrowG
  • ベストアンサー率53% (41/76)
回答No.1

カーソルは有限な資源なので、必ずクローズが必要です。 またこの中ではカーソルをOpenしかしていませんが、FetchしないでVBからどうやってデータを取っているのでしょう? 他にFetchする為のストアードプロシージャがあるのであれば、さらに処理を終了するためのストアードプロシージャを作成してその中でカーソルをクローズしてください。

takataka111
質問者

お礼

これは複数のレコードを一度に取得できるCURSORでFETCHはいりません、本を読んだ限りこのCURSOR(OPEN FOR)カーソルはCLOSEがいらないカーソルだとのことです。 ありがとうございました。

関連するQ&A