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

前
 
次
 

8 オートメーション・オブジェクトの紹介

この章では、一般的に使用されるOO4Oオートメーション・オブジェクトを紹介します。

内容は次のとおりです。

オートメーション・オブジェクトの概要

OO4Oにおけるオブジェクト操作上の階層は、「持つもの」と「属するもの」との関連を示します。

図8-1に、この操作上の階層を示します。

図8-1 OO4Oオートメーション・オブジェクト

OraSessionから始まる階層ダイアグラム
「図8-1 OO4Oオートメーション・オブジェクト」の説明

前述のオートメーション・オブジェクト・ダイアグラムは、この階層を示しています。

OraSessionオブジェクトの概要

OO4Oオートメーション・サーバーのインスタンスが作成されると、OraSessionオブジェクトが戻されます。主としてOracleデータベースへの接続を確立するためのインタフェースを提供します。また、これには、作成したOraDatabaseオブジェクト内の接続についての開始、コミットおよび取消しトランザクションに対するメソッドが含まれています。次のVisual Basicの例では、OO4Oオートメーション・サーバーのインスタンスを作成します。

'OracleInProcServer.XOraSession is the symbolic name for a 
'globally unique component identifier. 
Set OO4OSession = CreateObject("OracleInProcServer.XOraSession") 
 

OraServerオブジェクトの概要

OraServerオブジェクトは、Oracle Databaseインスタンスへの物理的な接続を表します。これは、OraDatabaseオブジェクトを表す、ユーザー・セッション作成用のOpenDatabaseメソッドを提供します。これにより、「接続多重化」が可能になります。

OraDatabaseオブジェクトの概要

OraDatabaseオブジェクトは、Oracleデータベース・インスタンスへのユーザー接続を表し、SQL文とPL/SQLコードを実行するためのメソッドを提供します。OraDatabaseオブジェクトは、OraSessionまたはOraServerオブジェクトのOpenDatabaseメソッドによって戻されます。

次に、OraSessionOpenDatabaseメソッドの使用例を示します。このメソッドで作成したOraDatabaseオブジェクトには、Oracleデータベースへの個別の物理接続が含まれています。

'Establish a connection to the ExampleDb database 
Set hrDBSession = OO4OSession.OpenDatabase("ExampleDb", "scott/tiger", 0&) 

次の例では、Oracleデータベースへの物理的なネットワークの接続を複数のユーザー・セッションで共有する方法を示します。複数のユーザー・セッションが共有する単一の接続を使用すると、Oracle Databaseのリソース使用量が削減され、拡張性が向上します。

'Create a server connection 
 
Set hrDBServer = CreateObject("OracleInProcServer.XOraServer") 
Set hrDBServer = oo4o.Open("ExampleDb") 
Set userSession1 = hrDBServer.OpenDatabase("scott/tiger", 0) 
 
'execute queries ... 
Set userSession2= hrDBServer.OpenDatabase("scott/tiger", 0) 
 
'execute queries ... 

OraDynasetオブジェクトの概要

OraDynasetオブジェクトは、SQL SELECT問合せの結果セットまたはストアド・プロシージャやファンクションから戻ったPL/SQLカーソル変数を表します。このオブジェクトは本来、クライアント側でスクロールおよび更新できるカーソルで、実行した問合せで生成された行セットを参照できます。これは、OraDatabaseインタフェースのCreateDynasetメソッドまたはCreateCustomDynasetメソッドで作成されます。

次のVisual Basicの例では、問合せを実行し、結果セット全体をループして戻った列の値を表示します。

Set employees = OraDatabase.CreateDynaset("select empno, ename from emp", 0&)
 
'While there are more rows 
while not employees.EOF 
 
'Display the values of empno and ename column of the current row 
msgbox employees("empno") & employees("ename") 
 
'Move to the next row 
employees.MoveNext 
wend

OraFieldオブジェクトの概要

OraFieldオブジェクトは、OraDynasetオブジェクトの列を抽象化したものです。これには、ダイナセット内の現在の行の列を示す値とメタデータが含まれています。前のOraDynasetオブジェクトの例では、この追加コードを使用して、empnoに対するFieldインタフェースを取得できます。

set empno = employees.Fields("empno") 
msgbox "Employee Number: " & empno.Value 

OraFieldsは、現在の行にあるすべての列を示すコレクション・オブジェクトです。

OraFieldオブジェクトは、Oracle Databaseがサポートするすべてのデータ型のインスタンスを示すことができます。これには、VARCHAR2NUMBERINTおよびFLOATなどの基本的な型に加え、Oracle8iで導入されたすべてのオブジェクト・リレーショナル型も含まれます。

OraParametersオブジェクトの概要

OraParametersオブジェクトは、OraParameterオブジェクトに対するコレクション・コンテナです。OraParameterオブジェクトは、実行時にSQL文またはPL/SQLブロックで使用するプレースホルダに対してデータ値を提供するために使用されます。入力値を提供するため、さらにデータベースからの戻り値を包含するために使用することもできます。次のサンプルでは、2つのパラメータ・オブジェクトを作成して更新問合せで使用します。

OraDatabase.Parameters.Add "SALARY", 4000, ORAPARM_INPUT 
OraDatabase.Parameters.Add "ENAME", "JONES", ORAPARM_INPUT 
Set updateStmt = OraDatabase.CreateSQL("update emp set sal = :SALARY" & _ 
             "where ename = :ENAME ") 

OraParameterオブジェクトの概要

OraParameterオブジェクトには、オブジェクト・リレーショナル・データ型も含めて、Oracle9iがサポートする全データ型の値を含めることができます。これらのデータ型は、PL/SQLのストアド・プロシージャとファンクションに対する入力または出力引数としてパスできます。OraParameterオブジェクトの値は、OraDynasetオブジェクトのフォーム内のPL/SQLカーソルを示すこともできます。

OraParamArrayオブジェクトの概要

OraParamArrayオブジェクトは、値の配列をバインドおよびフェッチするメカニズムを提供します。通常は、挿入と更新を一括して実行するために使用します。

'Create a table 
OraDatabase.ExecuteSQL ("create table part_nos(partno number," & _
             "description char(50), primary key(partno))") 
 
'Create two parameter arrays of size 10 to hold values for 
'part numbers (size 22 bytes), and their description (50 bytes long). 
OraDatabase.Parameters.AddTable "PARTNO", ORAPARM_INPUT, ORATYPE_NUMBER, 10, 22 
OraDatabase.Parameters.AddTable "DESCRIPTION", ORAPARM_INPUT, _ 
            ORATYPE_CHAR, 10, 50 
 
'Initialize the arrays 
For I = 0 To 10 
   OraDatabase.Parameters("PARTNO").put_Value = I, I 
   OraDatabase.Parameters("DESCRIPTION ") = "some description", I 
Next I 
 
'Execute the query 
Set OraSqlStmt = OraDatabase.CreateSql("insert into " & _
            "part_nos(partno, description) values(:PARTNO,:DESCRIPTION)", 0&)

OraSQLStmtオブジェクトの概要

OraSQLStmtオブジェクトは、通常、SELECT以外のSQL問合せやPL/SQLブロックを実行するために使用されます。次のコード例では、更新問合せを実行し、反映された行数を表示します。

Set updateStmt = OraDatabase.CreateSQL("update emp set sal = 3000" & _ 
                "where ename = 'JONES' ") 
MsgBox updateStmt.RecordCount 

後でOraSQLStmtオブジェクト(updateStmt)を使用することで、:SALARYプレースホルダに別の値を使用して前の問合せを実行できます。次に、例を示します。

OraDatabase.Parameters("SALARY").value = 200000 
updateStmt.Parameters("ENAME").value = "KING" 
updateStmt.Refresh