• 締切済み

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

お世話になります。 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レコードずつ取得する方法を探しています よろしくお願いします。

みんなの回答

  • TAGOSAKU7
  • ベストアンサー率65% (276/422)
回答No.1

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表で試して見ます

関連するQ&A