説明
OraParamArrayオブジェクトは、OraParameterオブジェクトによって表されるscalar型バインド変数に対して、SQL文またはPL/SQLブロック内のarray型バインド変数を表します。
備考
OraParamArrayオブジェクトは、OraDatabaseオブジェクトのOraParametersコレクションを介して間接的に作成、アクセスおよび削除されます。各パラメータには、識別名および関連付けられた値があります。
OraParamArrayには、配列の個々の要素にアクセスして操作するOLEオートメーション・コレクション・インタフェースが暗黙的に含まれます。添字またはGet_Valueメソッドを使用すると、個々の要素にアクセスできます。添字またはPut_Valueメソッドを使用すると、個々の要素を変更できます。
要素の値は、Variant型として取り出されます。要素のVariant型は、OraParamArrayオブジェクトのServerTypeによって決まります。要素の値にはNULLを使用でき、NULLを設定できます。オブジェクト型およびREFの要素の場合は、要素の値が、その型に対応するOO4Oオブジェクトとして戻されます。
SQL文またはPL/SQL文の中でパラメータ名をプレースホルダとして使用すると、(オブジェクトの記述に示されているとおり)他のオブジェクトのSQL文およびPL/SQL文にパラメータを自動的にバインドできます。パラメータを使用することで、動的な問合せを容易にし、プログラムのパフォーマンスを向上させます。パラメータは、実行前にSQL文およびPL/SQLブロックにバインドされます。
OraParametersコレクションは、OraDatabaseオブジェクトの一部であり、すべてのパラメータは、データベース内で(CreateDynaset、ExecuteSQLまたはCreateSQLメソッドを介して)実行されるSQL文またはPL/SQLブロックで使用できます。SQL文またはPL/SQLブロックの実行前に、関連付けられたOraDatabaseオブジェクトのすべてのパラメータのバインドが試行されます。(特定のSQL文またはPL/SQLブロックにパラメータが適用されないために)失敗したバインドは通知され、そのSQL文またはPL/SQLブロックが未変更のまま再実行された場合、バインドは再試行されません。
SQL文およびPL/SQLブロックはいずれもローカルには解析されないため(すべての解析はOracle Databaseで実行されます)、不要なバインドはパフォーマンス低下の原因となります。不要なパラメータのバインドを防止するには、AutoBindDisableおよびAutoBindEnableメソッドを使用します。
プロパティ
メソッド
例
例: SQL文でOraParamArraysを使用する方法
次の例では、SQL文でOraParamArrayオブジェクトを使用する方法を示します。
Dim OraSession As OraSession
Dim OraDatabase As OraDatabase
Dim OraSqlStmt As OraSQLStmt
Dim PartNoArray As OraParamArray
Dim DescArray As OraParamArray
Dim I As Integer
'Test case for inserting/updating/deleting multiple rows using parameter
' arrays with SQL statements
Set OraSession = CreateObject("OracleInProcServer.XOraSession")
Set OraDatabase = OraSession.OpenDatabase("exampledb", "scott/tiger", 0&)
'Create table
OraDatabase.ExecuteSQL ("create table part_nos(partno number," & _
"description char(50), primary key(partno))")
OraDatabase.Parameters.AddTable "PARTNO", ORAPARM_INPUT, ORATYPE_NUMBER, 10, 22
OraDatabase.Parameters.AddTable "DESCRIPTION", ORAPARM_INPUT, _
ORATYPE_CHAR, 10, 50
Set PartNoArray = OraDatabase.Parameters("PARTNO")
Set DescArray = OraDatabase.Parameters("DESCRIPTION")
'Initialize arrays
For I = 0 To 9
achar = "Description" + Str(I)
PartNoArray(I) = 1000 + I
DescArray(I) = achar
Next I
Set OraSqlStmt = OraDatabase.CreateSql("insert into
part_nos(partno, description) values(:PARTNO,:DESCRIPTION)", 0&)
'Update the newly created part_nos table
For I = 0 To 9
achar = "Description" + Str(1000 + I)
DescArray(I) = achar
Next I
'Update table
Set OraSqlStmt = OraDatabase.CreateSql("update part_nos set DESCRIPTION" & _
"=:DESCRIPTION where PARTNO = :PARTNO", 0&)
'Deleting rows
Set OraSqlStmt = OraDatabase.CreateSql("delete from part_nos where" & _
"DESCRIPTION=: Description ", 0&)
'Drop the table
OraDatabase.ExecuteSQL ("drop table part_nos")
例: PL/SQLでOraParamArraysを使用する方法
次の例では、PL/SQLでOraParamArrayオブジェクトを使用する方法を示します。Employee PL/SQLパッケージは、ORAEXAMP.SQLスクリプトを使用して設定できます。「デモ・スキーマとサンプル・コード」を参照してください。
Dim OraSession As OraSession
Dim OraDatabase As OraDatabase
Dim EmpnoArray As OraParamArray
Dim EnameArray As OraParamArray
Set OraSession = CreateObject("OracleInProcServer.XOraSession")
Set OraDatabase = OraSession.OpenDatabase("exampledb", "scott/tiger", 0&)
OraDatabase.Parameters.Add "ArraySize", 3, ORAPARM_INPUT
OraDatabase.Parameters.AddTable "EMPNOS", ORAPARM_INPUT, ORATYPE_NUMBER,3, 22
OraDatabase.Parameters.AddTable "ENAMES", ORAPARM_OUTPUT, _
ORATYPE_VARCHAR2, 3, 10
Set EmpnoArray = OraDatabase.Parameters("EMPNOS")
Set EnameArray = OraDatabase.Parameters("ENAMES")
'Initialize the newly created input parameter table EMPNOS
EmpnoArray(0) = 7698
EmpnoArray(1) = 7782
EmpnoArray(2) = 7654
'Execute the PLSQL package
OraDatabase.ExecuteSQL ("Begin Employee.GetEmpNamesInArray(:ArraySize," & _
":EMPNOS, :ENAMES); End;")
'Print out Enames
MsgBox EnameArray(0)
MsgBox EnameArray(1)
MsgBox EnameArray(2)