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レコードずつ取得する方法を探しています
よろしくお願いします。
お礼
ありがとうございます 動的SQLの場合 結果セットのカラムが動的に変わる場合 テーブル定義を動的に定義しなければなりませんが、可能でしょうか?
補足
ありがとうございます。 いろいろ、調べてみました。マニュアルにも結構載ってました。 bulk collectを使用するのがもっとも適しているような気がします。 pl sqlはカーソルを使用するのが大前提ばかりでちょっと意外でした。 性能を考えるのと、特段カーソルを使用しなければいけない理由は私はDBの 開発でゼロであったため、 pl sqlの説明資料がカーソルありきの説明ばかりなのには 驚いていました。