アプリ版:「スタンプのみでお礼する」機能のリリースについて

お世話になります、

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;
/

A 回答 (1件)

カーソルは有限な資源なので、必ずクローズが必要です。



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

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

ありがとうございました。

お礼日時:2001/12/26 09:17

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す