ヘッダーをスキップ
Oracle® Objects for OLE開発者ガイド
11gリリース2 (11.2) for Microsoft Windows
B58887-04
  目次へ移動
目次
索引へ移動
索引

前
 
次
 

CreatePLSQLDynasetメソッド

適用対象

OraDatabaseオブジェクト

非推奨

これらのタスクの実行方法については、「PL/SQLカーソル変数を戻す方法」を参照してください。

説明

PL/SQLカーソルからダイナセットを作成します。SQL文は、ストアド・プロシージャまたは無名ブロックである必要があります。作成されるダイナセットは読取り専用であり、SQLプロパティを設定しようとすると、エラーになります。カーソル以外のダイナセットと同様、新しいパラメータを指定してこのダイナセットをリフレッシュできます。

使用方法

set OraDynaset = CreatePLSQLDynaset(SQLStatement, CursorName, options)

引数

引数 説明
SQLStatement 有効なOracle PL/SQLストアド・プロシージャまたは無名ブロック。
CursorName PL/SQLストアド・プロシージャで作成されるカーソルの名前。
options ダイナセットのオプション状態を示すビット・フラグ。それぞれの値を追加することで1つ以上のオプションを組み合せることができます。

定数

オプション・フラグの値は、次のとおりです。

定数 説明
ORADYN_DEFAULT &H0& デフォルトの動作を受け入れる。
ORADYN_NO_BLANKSTRIP &H2& データベースから取り出された文字列データから、後続するブランクを削除しない。
ORADYN_NOCACHE &H8& ダイナセット用のローカル・データ・キャッシュを作成しない。ローカル・キャッシュがない場合は、ダイナセットの以前の行は使用できません。ただし、データベースからのデータの取出し(移動操作)と行からのデータの取出し(フィールド操作)のパフォーマンスは向上します。ダイナセットの列を順に取り出すアプリケーションでは、パフォーマンスを向上し、リソースの使用を減らすため、このオプションを使用します。
ORADYN_NO_MOVEFIRST &H40& ダイナセットの作成時にMoveFirst操作を強制的に実行しない。BOFEOFは両方ともTRUEです。

これらの値は、oraconst.txtファイルにあります。

備考

SQL文は、PL/SQLストアド・プロシージャであることが必要で、PL/SQLの無名ブロックを実行する場合のように、コールの前後にBEGIN文とEND文を付ける必要があります(付けない場合は、エラーが戻ります)。CursorName引数は、ストアド・プロシージャ内またはPL/SQLの無名ブロック内で作成されたカーソルと正確に一致する必要があります(一致しない場合は、エラーが戻ります)。ストアド・プロシージャ内で作成されたカーソルは、有効なSQLのSELECT文で記述する必要があります。

ストアド・プロシージャにより、出力パラメータとしてカーソルが戻される場合は、OraParameters.Addメソッドを使用してPL/SQLカーソルの変数をバインドする必要はありません。この場合も、PL/SQLのバインド変数を、OraParametersコレクションと組み合せて使用できます。

このメソッドは、作成されたダイナセットの最初の行に自動的に移動します。

ORADYN_READONLYORADYN_ORAMODEORADYN_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