説明
PL/SQLカーソルからダイナセットを作成します。SQL文は、ストアド・プロシージャまたは無名ブロックである必要があります。作成されるダイナセットは読取り専用であり、SQLプロパティを設定しようとすると、エラーになります。カーソル以外のダイナセットと同様、新しいパラメータを指定してこのダイナセットをリフレッシュできます。
引数
引数 | 説明 |
---|---|
SQLStatement |
有効なOracle PL/SQLストアド・プロシージャまたは無名ブロック。 |
CursorName |
PL/SQLストアド・プロシージャで作成されるカーソルの名前。 |
options |
ダイナセットのオプション状態を示すビット・フラグ。それぞれの値を追加することで1つ以上のオプションを組み合せることができます。 |
定数
オプション・フラグの値は、次のとおりです。
定数 | 値 | 説明 |
---|---|---|
ORADYN_DEFAULT |
&H0& |
デフォルトの動作を受け入れる。 |
ORADYN_NO_BLANKSTRIP |
&H2& |
データベースから取り出された文字列データから、後続するブランクを削除しない。 |
ORADYN_NOCACHE |
&H8& |
ダイナセット用のローカル・データ・キャッシュを作成しない。ローカル・キャッシュがない場合は、ダイナセットの以前の行は使用できません。ただし、データベースからのデータの取出し(移動操作)と行からのデータの取出し(フィールド操作)のパフォーマンスは向上します。ダイナセットの列を順に取り出すアプリケーションでは、パフォーマンスを向上し、リソースの使用を減らすため、このオプションを使用します。 |
ORADYN_NO_MOVEFIRST |
&H40& |
ダイナセットの作成時にMoveFirst 操作を強制的に実行しない。BOF とEOF は両方ともTRUEです。 |
これらの値は、oraconst.txt
ファイルにあります。
備考
SQL文は、PL/SQLストアド・プロシージャであることが必要で、PL/SQLの無名ブロックを実行する場合のように、コールの前後にBEGIN
文とEND
文を付ける必要があります(付けない場合は、エラーが戻ります)。CursorName
引数は、ストアド・プロシージャ内またはPL/SQLの無名ブロック内で作成されたカーソルと正確に一致する必要があります(一致しない場合は、エラーが戻ります)。ストアド・プロシージャ内で作成されたカーソルは、有効なSQLのSELECT
文で記述する必要があります。
ストアド・プロシージャにより、出力パラメータとしてカーソルが戻される場合は、OraParameters.Addメソッドを使用してPL/SQLカーソルの変数をバインドする必要はありません。この場合も、PL/SQLのバインド変数を、OraParameters
コレクションと組み合せて使用できます。
このメソッドは、作成されたダイナセットの最初の行に自動的に移動します。
ORADYN_READONLY
、ORADYN_ORAMODE
、ORADYN_NO_REFETCH
またはORADYN_DIRTY_WRITE
の各オプションを指定しても、ダイナセットの作成には影響を与えません。
例
この例では、CreatePlsqlDynaset
メソッドおよびRefresh
メソッドでPL/SQLカーソルを使用する方法を示します。この例では、PL/SQLカーソルを、DEPTNO
パラメータの様々な値を含むダイナセットとして戻します。対応するストアド・プロシージャ(EMPCUR.SQL
にある)がOracle Databaseから利用可能であることを確認し、このコードをフォームの定義セクションに貼り付けてください。次に[F5]を押します。
Sub Form_Load () 'Declare variables Dim OraSession As OraSession Dim OraDatabase As OraDatabase Dim OraDynaset As OraDynaset 'Create the OraSession Object. Set OraSession = CreateObject("OracleInProcServer.XOraSession") 'Create the OraDatabase Object by opening a connection to Oracle. Set OraDatabase = OraSession.OpenDatabase("ExampleDb", "scott/tiger", 0&) ' Create the Deptno parameter OraDatabase.Parameters.Add "DEPTNO", 10, ORAPARM_INPUT OraDatabase.Parameters("DEPTNO").ServerType = ORATYPE_NUMBER ' Create OraDynaset based on "EmpCursor" created in stored procedure. Set OraDynaset = OraDatabase.CreatePLSQLDynaset("Begin Employee.GetEmpData" & _ "(:DEPTNO,:EmpCursor); end;", "EmpCursor", 0&) 'Should display KING MsgBox OraDynaset.Fields("ENAME").Value 'Should display 7839 MsgBox OraDynaset.Fields("EMPNO").Value ' Now set the deptno value to 20 OraDatabase.Parameters("DEPTNO").Value = 20 'Refresh the dynaset OraDynaset.Refresh 'Should display JONES MsgBox OraDynaset.Fields("ENAME").Value 'Should display 7566 MsgBox OraDynaset.Fields("EMPNO").Value 'Remove the parameter. OraDatabase.Parameters.Remove ("DEPTNO") End Sub