適用対象
説明
OraParametersコレクションにパラメータを追加します。
使用方法
oraparameters.Add Name, Value, IOType, ServerType, ObjectName
引数
このメソッドの引数は、次のとおりです。
| 引数 | 説明 |
|---|---|
Name |
パラメータ・コレクションに追加するパラメータの名前。この名前は、パラメータを識別するため、および関連するSQL文とPL/SQL文内のプレースホルダとして使用されます。 |
Value |
パラメータの初期値を指定するVariant。初期値によってこのパラメータのデータ型が定義されるため、重要です。 |
IOType |
SQL文とPL/SQLブロック内でのパラメータの使用方法を指定する整数コード。 |
ServerType |
このパラメータがバインドされるOracle Databaseの型を指定します。BLOB、CLOB、BFILE、OBJECT、REF、NESTED TABLEまたはVARRAYへのバインド時に、この指定が必要です。指定できる値のリストは、「ServerTypeプロパティ」のOraParameterを参照してください。 |
ObjectName |
大/小文字が区別され、Object名を含む文字列。ServerTypeがORATYPE_OBJECT、ORATYPE_VARRAYまたはORATYPE_TABLEの場合にのみ、この指定が必要です。ServerTypeは、PL/SQLでREFが使用される場合、ORATYPE_REFに必要です。 |
IOTypeの設定
IOTypeの設定内容は、次のとおりです。
| 設定 | 値 | 説明 |
|---|---|---|
ORAPARM_INPUT |
1 | 入力変数にのみ使用 |
ORAPARM_OUTPUT |
2 | 出力変数にのみ使用 |
ORAPARM_BOTH |
3 | 入力変数と出力変数の両方に使用 |
これらの値は、oraconst.txtファイルにあります。
ServerTypeがVAR、VARCHAR2およびORATYPE_RAW_BINであるORAPARM_OUTPUT変数の最大サイズは、デフォルトで128バイトに設定されます。この値を変更するには、MinimumSizeプロパティを使用します。VARおよびVARCHAR2に対するORAPARM_OUTPUT変数の最小サイズは、データベースの列から予測されるデータのサイズより常に大きい値に設定する必要があります。
この値が正しいことを確認してください。パラメータのタイプがINであるストアド・プロシージャに対してORAPARM_BOTHなど、不正なオプションを指定すると、結果はエラーになります。ORAPARM_BOTHは、INおよびOUTのパラメータ専用です。INパラメータを持つストアド・プロシージャとOUTパラメータを持つ別のストアド・プロシージャに対してこれを使用するわけではありません。この場合は、2つのパラメータを使用します。このようなエラーが発生することはまれですが、パラメータに関するエラーが発生した場合は、IOTypeが正しいことを確認してください。
Value引数には、OraBLOBなどのOracle Database 10gオブジェクトを使用できます。その時点でオブジェクトのコピーが作成されるので、パラメータの値を参照する新規オブジェクトを取得するためにValueプロパティにアクセスする必要があることに注意してください。たとえば、IOTypeがORATYPE_BOTHで、ダイナセットから取得したOraBLOBが入力値として渡される場合、新たに更新されたパラメータの出力値を取得するためには、SQLが実行された後にParameterのValueプロパティに1回アクセスする必要があります。オブジェクトは、ダイナセットから取得する場合と同様の方法でパラメータから取得されます。
Valueプロパティは、常にパラメータの最新の値を参照します。Visual BasicのNULL値を値として渡すこともできます。Visual BasicのEMPTY値は、BLOBおよびCLOBデータ型に対しては空のLOBを意味する目的で、OBJECT、VARRAYおよびNESTED TABLEデータ型に対してはオブジェクトの属性がすべてNULLであることを意味する目的で使用できます。
備考
パラメータを使用して、(SQL文を再構築するかわりに)SQLバインド変数を表します。SQLバインド変数は、問合せを再解析することなくパラメータ値を変更できるため便利です。SQLバインド変数は、入力変数としてのみ使用します。
パラメータを使用して、PL/SQLバインド変数を表すこともできます。PL/SQLのバインド変数は、入力と出力両方の変数として使用できます。
Oracle Raw型の列にバインドする場合は、ServerType値にORATYPE_RAW_BINを使用します。値のPutまたはGetには、バイト配列を使用します。ORATYPE_RAW_BINバインド・バッファの最大許容サイズは、表の列にバインドする場合は2000バイト、ストアド・プロシージャにバインドする場合は32KBです。コード例は、ORACLE_BASE\\ORACLE_HOME\OO4O\VB\Rawディレクトリにあるサンプルを参照してください。
例
この例では、AddおよびRemoveパラメータ・メソッド、ServerTypeパラメータ・プロパティ、(ORAEXAMP.SQLにある)ストアド・プロシージャおよびファンクションをコールするExecuteSQLデータベース・メソッドの使用方法を示します。このコードをコピーして、フォームの定義セクションに貼り付けてください。次に[F5]を押します。
Sub Form_Load ()
'Declare variables
Dim OraSession As OraSession
Dim OraDatabase As OraDatabase
'Create the OraSession Object.
Set OraSession = CreateObject("OracleInProcServer.XOraSession")
'Create the OraDatabase Object.
Set OraDatabase = OraSession.OpenDatabase("ExampleDb", "scott/tiger", 0&)
'Add EMPNO as an Input/Output parameter and set its initial value.
OraDatabase.Parameters.Add "EMPNO", 7369, ORAPARM_INPUT
OraDatabase.Parameters("EMPNO").ServerType = ORATYPE_NUMBER
'Add ENAME as an Output parameter and set its initial value.
OraDatabase.Parameters.Add "ENAME", 0, ORAPARM_OUTPUT
OraDatabase.Parameters("ENAME").ServerType = ORATYPE_VARCHAR2
'Add SAL as an Output parameter and set its initial value.
OraDatabase.Parameters.Add "SAL", 0, ORAPARM_OUTPUT
OraDatabase.Parameters("SAL").ServerType = ORATYPE_NUMBER
'Execute the Stored Procedure Employee.GetEmpName to retrieve ENAME.
' This Stored Procedure can be found in the file ORAEXAMP.SQL.
OraDatabase.ExecuteSQL ("Begin Employee.GetEmpName (:EMPNO, :ENAME); end;")
'Display the employee number and name.
'Execute the Stored Function Employee.GetSal to retrieve SAL.
' This Stored Function can be found in the file ORAEXAMP.SQL.
OraDatabase.ExecuteSQL ("declare SAL number(7,2); Begin" & _
":SAL:=Employee.GetEmpSal (:EMPNO); end;")
'Display the employee name, number and salary.
MsgBox "Employee " & OraDatabase.Parameters("ENAME").value & ", #" & _
OraDatabase.Parameters("EMPNO").value & ",Salary=" & _
OraDatabase.Parameters("SAL").value
'Remove the Parameters.
OraDatabase.Parameters.Remove "EMPNO"
OraDatabase.Parameters.Remove "ENAME"
OraDatabase.Parameters.Remove "SAL"
End Sub