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