OKWAVEのAI「あい」が美容・健康の悩みに最適な回答をご提案!
-PR-
締切り
済み

VBからストアドの動的SQLを呼んで値をレコードセットで取得する方法

  • 困ってます
  • 質問No.169189
  • 閲覧数936
  • ありがとう数2
  • 気になる数0
  • 回答数1
  • コメント数0

お世話になります。

VBからストアドの動的SQLを呼んで、VB側で値をレコードセットで取得する方法を探しています。

■ストアド
CREATE OR REPLACE PACKAGE SAMPLE as

CURSOR c2 IS select A from TBL;
TYPE TANTOYOSANDATA IS REF CURSOR RETURN c2%ROWTYPE;

PROCEDURE GetNUMBER(C IN NUMBER,
          CU OUT TANTOYOSANDATA);
end;
/

--
CREATE OR REPLACE PACKAGE BODY SAMPLE IS

PROCEDURE GetNUMBER(C IN NUMBER,
            CU OUT TANTOYOSANDATA) IS

CUR INTEGER;
STATUS INTEGER;
ROW_PROCESSED INTEGER;
A NUMBER;

BEGIN
--カーソルをOPENする
CUR :=DBMS_SQL.OPEN_CURSOR;

DBMS_SQL.PARSE(CUR,'SELECT A FROM TBL ',DBMS_SQL.V7);

DBMS_SQL.DEFINE_COLUMN(CUR,1,A);

ROW_PROCESSED :=DBMS_SQL.EXECUTE(CUR);
STATUS :=DBMS_SQL.FETCH_ROWS(CUR);

WHILE (STATUS <> 0) LOOP
DBMS_SQL.COLUMN_VALUE(CUR,1,A);

STATUS :=DBMS_SQL.FETCH_ROWS(CUR);
END LOOP;

END;

END SAMPLE;
/

■VB側

Set GoORASESSION = CreateObject("OracleInProcServer.XOraSession")
Set GoORADATABASE = GoORASESSION.OpenDatabase(dbname, cnuser, ORADB_DEFAULT)

Set Recordset = GoORADATABASE.CreatePLSQLDynaset("Begin SAMPLE.GetTANTOINFO(1,:CU)); end;", "CU", ORADYN_DEFAULT)

' If Recordset.EOF Then
Do While Not Recordset.EOF
Label11.Caption = Recordset(0)
Recordset.movenext
 Loop


復帰値をRecordSetで受けて
それをまわしながら1レコードずつ取得する方法を探しています

よろしくお願いします。
通報する
  • 回答数1
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

回答 (全1件)

  • 回答No.1
レベル12

ベストアンサー率 65% (276/422)

DBMSはデバッグ用にしか使った事がないのですが・・・ カーソルを開いて、カーソルに返さないでもいいのでは? ところでこのストアド、動的ではないような気が・・・ それにSQL文のみで実現するのでは? それともこのストアドは、質問用のサンプルで、実際には動的なのですか? もし質問の内容が正規なものなら無理にストアドを使用しないで   Dim GoORASESSION  As Object ...続きを読む
DBMSはデバッグ用にしか使った事がないのですが・・・
カーソルを開いて、カーソルに返さないでもいいのでは?

ところでこのストアド、動的ではないような気が・・・
それにSQL文のみで実現するのでは?
それともこのストアドは、質問用のサンプルで、実際には動的なのですか?

もし質問の内容が正規なものなら無理にストアドを使用しないで
  Dim GoORASESSION  As Object
  Dim GoORADATABASE  As OraDatabase
  Dim Recordset    As OraDynaset
  Set GoORASESSION = CreateObject("OracleInProcServer.XOraSession")
  Set GoORADATABASE = GoORASESSION.OpenDatabase(dbname, cnuser, ORADB_DEFAULT)
  
  Set Recordset = GoORADATABASE.DbCreateDynaset("select A from tbl", ORADYN_DEFAULT)
  Do While Not Recordset.EOF
    Debug.Print Recordset.Fields(0).Value
    Recordset.MoveNext
  Loop
これじゃダメですか?

これがはずれで、どうしてもストアドを使用するなら、DBMSを使用しない書き方しかわからないのですが・・・
カーソルにA列の値だけセットしたいという意味ですよね?
お礼コメント
noname#1752

ありがとうございました、動的SQLなのでカーソルが使えなかったので、一時表やPLSQL表で試して見ます
投稿日時 - 2001-11-21 11:19:06


このQ&Aのテーマ
このQ&Aで解決しましたか?
関連するQ&A
-PR-
-PR-
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ