こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

VB6 + OO4O プロシージャの実行&複数行を受け取る方法

VB6 + OO4O プロシージャの実行&複数行を受け取る方法

現在、VB6でOracleデータベースを操作しようと試みている最中で、
OO4Oで接続しています。
(表現誤っているかもしれません。。。)

Oracleは今回初めてで、今まではSQLserverだったのですが、
SQLserverで、
 1.ストアドを実行(パラメータあり)
 2.レコードセット(複数行)を受け取る
 3.ループで全件処理
  ・・・

というような処理をしていました。
たとえば、あるテーブルの、ある条件に一致したレコード(複数あり)を全件取得 など。

「引数を渡してストアドプロシージャを実行し、複数行を結果として受け取る」ということがしたく、
Oracleでどのように実現させるかを調べてみたのですが、
「SQL文を記述し、受け取る」
 例)strSQL = "select * from tbl"
   Set OraDynaset = OraDatabase.CreateDynaset(strSQL, 0)
というようなサンプルしか見つけられませんでした。
where句で条件を記述すれば同じなのかもしれませんが、
そういったこまごました記述をストアドプロシージャに記載しておき、
呼び出す際はパラメータだけ指定する、ということを想定しています。

ストアドを実行するサンプルは複数見つけたのですが、戻り値が1つのみか、戻り値なしのもので、
複数行を結果として受け取るようなサンプルが見あたりませんでした。

ストアド(PL/SQL)も作成してみたのですが、
単純に
 select * from TBL;
とするとエラーで、
 select * BULK COLLECT INTO vTBl from TBL;
 for i in 1 .. vTBl.count loop
  -- 全レコードの項目「name」を表示する。
  dbms_output.put_line(vTBl(i).name);
 end loop;
というように1件1件処理させていく方法しか見つけれませんでした。

Oracleのストアドは、今までのSQLServerの考え方はいけないのでしょうか?

調べるとしたら、どのような単語で調べたらよろしいでしょうか?
「VB6」「oo4o」「複数行」「プロシージャ」など、いろいろ努力はしたつもりなのですが。。。

ご指導よろしくお願いいたします。

投稿日時 - 2010-03-31 17:24:19

QNo.5792782

困ってます

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

SELECT INTOは1単一行のデータ取得をする際に用います。
◆ストアード(PL/SQL)での複数レコード取得
(1)カーソル定義
(2)カーソルオープン
(3)カーソル行データ取得(フェッチ)
(4)カーソルクローズ

--カーソル定義
declare
cursor c_depts is select dept_id,dept_name from dept;
dept_rec c_depts%rowtype;

begin

--カーソルオープン
open c_depts;

loop
--1レコード分のデータ取得
fetch c_depts into dept_rec;

-- レコードが無くなればループ終了
exit when c_depts%notfound;

dbms_output.put_line('部門コード1:' || dept_rec.dept_id);
dbms_output.put_line('部門名称:' || dept_rec.dept_name);
end loop;

--カーソルクローズ
close c_depts;

end;

投稿日時 - 2010-04-01 14:52:09

補足

Hardkingさま、ご回答いただいておりました。
「お礼」を書いた際はまだまだ勉強不足だったので、せっかくのHardkingさまのご回答でも理解できていなかったのですが、何とか処理できました。

おそくなりましたが解決いたします。
ありがとうございました。

投稿日時 - 2011-01-05 21:42:39

お礼

Hardking様、ご回答ありがとうございます!
ご回答遅くなり申し訳ありません。

このストアドですが、
抽出条件を引数として渡し、
複数行を取得する、というVBはどのように記述するのでしょうか?
「SQL文を記述し、受け取る」というサンプルしか見つけられなかったもので。。。

ご指導よろしくお願いいたします。

投稿日時 - 2010-04-08 22:12:09

このQ&Aは役に立ちましたか?

2人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問