ヘッダーをスキップ
Oracle Objects for OLE 開発者ガイド
11g リリース1(11.1)
E05794-01
  目次へ
目次
索引へ
索引

戻る
戻る
 
次へ
次へ
 

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データベース・インスタンスへの物理的な接続を示します。このオブジェクトは、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