お世話になります、

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

このQ&Aに関連する最新のQ&A

A 回答 (1件)

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



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

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

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

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

このQ&Aに関連する人気のQ&A

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

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

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qcursor.getString

JavaのSQLiteの「cursor.getString」というのがあると思うのですが、どうゆう事をやるのですか?

些細な疑問です。

Aベストアンサー

cursor.getString(列番号)cursor.getInt(列番号)メソッドを用いて現在の行の値を列番号で取得
http://kuwalab.hatenablog.jp/entry/20110212/1297508786

QOracleのCreate Table 文のStorage句

お世話になります。

OracleのCreate Table 文のStorage句のNextの値を
変更したいのですが、できるのでしょうか?

Alter Table文で変更するのでしょうか?
手元にマニュアルが無く困っております。

よろしくお願いします。

Aベストアンサー

alter table テーブル名 storage ( next 変更後のサイズ );

だっけかな?

QPL/SQLでCREATE SEQUENCEの呼び出し

いつも参考にさせていただいてます。

select文で取得した日付の年下2桁をもとに
順序を取得したいと思っています。

CREATE SEQUENCEは

seq_id_04
seq_id_05
seq_id_06
  :
  
というように年ごとに作成されてあります。

seq_id_yy.nextval
yyを取得した年に置き換えて実行したいのですが、
なかなかうまくいきません。

初めてのPL/SQLのため説明文におかしな部分があったらすみません。
ご存知の方がいましたら、ぜひぜひご教授ください。

Aベストアンサー

こんにちわ。

Execute immediate 文を使えばできる筈です。
先ずは、
 vSQL varchar2(256);
 vSeqNo NUMBER(8);
のように変数が定義されていたとして、
vSQL にSequence をSelect するSQL 文を作成します。
こんな感じです。
→ vSQL := 'SELECT seq_id_' || to_char(sysdate, 'YY') || '.nextval from dual';

そうしたら、
PL/SQL ブロックの中で、
execute immediate vSQL into vSeqNo;
として下さい。

QAccess_2002 Replace方法

Accessにてシステムを構築しておりますが、テーブルのデータのReplaceについて悩んでおります。

TableA
〔NO〕 〔型番〕
01   多分ABC
02   DEFGとのこと
03   HIだそうです
04   JKL
05   MNO・

この様なTableAの型番から余分な文字を削除する処理を行いたく、現在は更新クエリにてReplace関数を使用し
行っています。
Replace(Replace(Replace(Replace([型番],"多分",""),"とのこと",""),"だそうです゜",""),"・","")

TableA
〔NO〕 〔型番〕
01   ABC
02   DEFG
03   HI
04   JKL
05   MNO

この「余分な文字」は現在100以上あり、今後もどんどん増えていきます。
クエリでのReplaceは見にくくメンテナンスもしづらいです。
「余分な文字」をまとめたテーブルでも作成しそれを使ってうまい事出来ないか考えていますが
アイデアが浮かびません(;_;)。

皆様のお知恵をお貸しくださいませm(_ _)m

Accessにてシステムを構築しておりますが、テーブルのデータのReplaceについて悩んでおります。

TableA
〔NO〕 〔型番〕
01   多分ABC
02   DEFGとのこと
03   HIだそうです
04   JKL
05   MNO・

この様なTableAの型番から余分な文字を削除する処理を行いたく、現在は更新クエリにてReplace関数を使用し
行っています。
Replace(Replace(Replace(Replace([型番],"多分",""),"とのこと",""),"だそうです゜",""),"・","")

TableA
〔NO〕 〔型番〕
01   ABC
02   DEFG
...続きを読む

Aベストアンサー

> 「余分な文字」をまとめたテーブルでも作成しそれを使ってうまい事出来ないか

そのテーブルを作れば、クエリで一発で対応できます。
(こちらの環境で動作確認済み:WinXP Home&Excel2003)

【テーブル】
「TableA」テーブル:
 フィールド = No(テキスト型・主キー), 型番(テキスト型)

「削除リスト」テーブル:
 フィールド = 削除文字(テキスト型・主キー)

【クエリ】
SQL文:
 UPDATE TableA, 削除リスト SET TableA.型番 = Replace([型番],[削除文字],"");


添付画像は、左から
  更新クエリ適用前のテーブルのデータ(予め複製)
  更新クエリ適用後のテーブルのデータ
  上記SQL文をクエリのデザインビューで表示したもの
です。

『削除リスト』に登録された文字パターンを複数持っている場合も含めて、問題なく
削除されることを確認しました(→No=06)。

※2つのテーブル間にフィールドの結合がない選択クエリを作成すると、そのレコードは
  双方のテーブル件数の乗算となります(一方のテーブルが5件、他方が6件なら、
  選択クエリは5*6=30件を表示)。
  これと同じで、上記クエリを実行すると、「○○件のレコードが更新されます」の
  確認メッセージでは、テーブルの実レコード数より大きくなりますのでご注意下さい。

> 「余分な文字」をまとめたテーブルでも作成しそれを使ってうまい事出来ないか

そのテーブルを作れば、クエリで一発で対応できます。
(こちらの環境で動作確認済み:WinXP Home&Excel2003)

【テーブル】
「TableA」テーブル:
 フィールド = No(テキスト型・主キー), 型番(テキスト型)

「削除リスト」テーブル:
 フィールド = 削除文字(テキスト型・主キー)

【クエリ】
SQL文:
 UPDATE TableA, 削除リスト SET TableA.型番 = Replace([型番],[削除文字],"");


添付画像は、左から
...続きを読む

QORACLE MASTER試験について

こんにちわ。質問させてください。

Oracleシルバーの受験を考えています。
ちなみに9iです。

ただ、試験の範囲がOracleのページを見ても
よくわかりません。というより試験の詳細の情報
がまったく掲載されていないような気がします。

一応本屋さんで調べたところ、シルバーの試験範囲として
SQL、DBAがあることはわかりました。
しかし、確認する限りでは3科目あるような気がします。
本屋さんに行ってもテキストは何冊もあるし・・・。
ということは、SQLと、DBAは必須であとの科目は選択
ということなのでしょうか?

(1)シルバーにはどんな科目があるのかを教えてください。
→どれが必須でどれが選択なのかも教えてください。

(2)試験はいつ行われているのですか?どのような周期ですか?
→土曜日・日曜日も行われているのですか?

(3)上記2点の情報が載っているWebページをご存知の方がいましたらご教授ください。

※過去ログに同様の質問がありましたらご容赦願います。

ご回答宜しくお願いします。

こんにちわ。質問させてください。

Oracleシルバーの受験を考えています。
ちなみに9iです。

ただ、試験の範囲がOracleのページを見ても
よくわかりません。というより試験の詳細の情報
がまったく掲載されていないような気がします。

一応本屋さんで調べたところ、シルバーの試験範囲として
SQL、DBAがあることはわかりました。
しかし、確認する限りでは3科目あるような気がします。
本屋さんに行ってもテキストは何冊もあるし・・・。
ということは、SQLと、DBAは必須であとの科目は選択
とい...続きを読む

Aベストアンサー

こんにちわ、一応Platinum持ちのVDSLと申します。

(1)試験科目
Oracle Silverを認定してもらうために必要なのは、下記の3科目です。
 ・Oracle9i入門 SQL編
 ・Oracle9i入門 データベース編
 ・Oracle9iデータベース管理I
以前は上の2科目だけだったのですが、10月頭の試験科目改定で3科目になりました。
ちなみに、上の2科目を取得すると"Oracle Silver Fellow"の認定がもらえます。

(2)試験の実施場所等
例外もありますが、基本的にアールプロメトリック社の会場で受ける事になります。
パソコンに向かってやる試験になります。
自分が受験したいときにいつでも受けることが出来ます(数日前までに予約が必要ですが)。
土曜日やっている会場はありますが、休日やっている会場はなかったと思います。

(3)
とりあえず公式のページです。
Oracle Masterの受験科目について
http://www.oracle.co.jp/education/master/om_02.html
受験会場等について
http://www.prometric-jp.com/

こんにちわ、一応Platinum持ちのVDSLと申します。

(1)試験科目
Oracle Silverを認定してもらうために必要なのは、下記の3科目です。
 ・Oracle9i入門 SQL編
 ・Oracle9i入門 データベース編
 ・Oracle9iデータベース管理I
以前は上の2科目だけだったのですが、10月頭の試験科目改定で3科目になりました。
ちなみに、上の2科目を取得すると"Oracle Silver Fellow"の認定がもらえます。

(2)試験の実施場所等
例外もありますが、基本的にアールプロメトリック社の会場で受ける事になります。
パソコ...続きを読む


人気Q&Aランキング

おすすめ情報