説明
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