Microsoft OLE DB は、OLE/COM インターフェースのセットで、さまざまな情報源に保管されたデータに対する統一されたアクセスを、アプリケーションに提供します。 OLE DB 構成要素の DBMS アーキテクチャーでは、 OLE DB Consumer と OLE DB Provider を定義しています。 OLE DB Consumer は、 OLE DB インターフェースを使用するシステムまたはアプリケーションで、 OLE DB Provider は、OLE DB インターフェースを公開する構成要素です。 OLE DB Providers には以下の 2 つのクラスがあります。 1 つは OLE DB データ提供者 で、データを所有し、そのデータを行セットのような表形式で公開します。もう 1 つは OLE DB サービス提供者 で、それ自身のデータを所有しませんが、 OLE DB インターフェースによってデータを作成および使用して、サービスをカプセル化します。
DB2 ユニバーサル・データベースは、OLE DB ソースにアクセスする表関数を定義可能にすることによって、 OLE DB アプリケーションの作成を単純化します。 DB2 は、任意の OLE DB データまたはサービス提供者にアクセスすることができる OLE DB Consumer になります。 OLE DB インターフェースを介してデータを公開するデータ・ソース上で、 GROUP BY、JOIN、および UNION を含む操作を実行することができます。たとえば、OLE DB 表関数を定義して、 Microsoft Access データベースまたは Microsoft Exchange のアドレス帳からの表を戻し、それからこの OLE DB 表関数からのデータと DB2 データベース中のデータとをシームレスに結合したレポートを作成することができます。
OLE DB 表関数を使用すると、OLE DB Provider への組み込みアクセスが提供され、アプリケーション開発の労力を削減することができます。 C、Java、および OLE オートメーション表関数では、開発者は表関数をインプリメントする必要がありますが、OLE DB 表関数では、汎用組み込み OLE DB Consumer が、データを検索する OLE DB Provider とやりとりをします。そのため必要とされるのは、言語タイプ OLEDB の表関数を登録し、 OLE DB Provider と、データ・ソースと関係のある行セットを参照することだけです。 OLE DB 表関数を利用するために、UDF プログラミングを行う必要はありません。
OLE DB 表関数を DB2 ユニバーサル・データベースで使用するには、 OLE DB 2.0 またはそれ以降をインストールする必要があります (これは、 Microsoft 社の http://www.microsoft.com から入手できます)。 OLE DB をインストールしていないまま OLE DB 表関数を呼び出そうとすると、 DB2 は SQLCODE 465、SQLSTATE 58032、理由コード 35 を発行します。システム要件と、ご使用のデータ・ソースで使用可能な OLE DB Providers については、データ・ソース資料を参照してください。 OLE DB 表関数を定義および使用するサンプルのリストについては、 付録 B, サンプル・プログラムを参照してください。 OLE DB の仕様については、 Microsoft OLE DB 2.0 Programmer's Reference and Data Access SDK, Microsoft Press, 1998 を参照してください。
OLE DB 表関数を単一の CREATE FUNCTION ステートメントで定義するには、以下のようにする必要があります。
OLE DB データ・ソースは、そのデータを行セット と呼ばれる表形式で公開します。行セットとは、それぞれの行が列セットを持つ行のセットです。 RETURNS TABLE 文節には、ユーザーと関係がある列だけが含まれます。 OLE DB データ・ソースでの表関数列と行セットの列とのバインドは、列名に基づいて行われます。 OLE DB Provider が大文字小文字の区別をする場合、たとえば、 "UPPERcase" のように、列名を引用符の間に置いてください。完全修飾名にすることもできる行セット名の詳細については、 完全修飾行セット名を参照してください。 OLE DB データ・タイプの DB2 データ・タイプへのマッピングについては、 サポートされる OLE DB データ・タイプを参照してください。 CREATE FUNCTION ステートメントの完全な構文および EXTERNAL NAME 文節の規則については、 SQL 解説書 を参照してください。
EXTERNAL NAME 文節は、以下のいずれかの形式をとることができます。
'server!rowset' または '!rowset!connectstring'
ここで、各パラメーターは以下のとおりです。
CREATE FUNCTION ステートメントの EXTERNAL NAME 文節で接続ストリング を使用するか、または CREATE SERVER ステートメントで CONNECTSTRING オプションを指定することができます。
たとえば、以下の CREATE FUNCTION および SELECT ステートメントを使用して、 OLE DB 表関数を定義して Microsoft Access データベースからの表を戻すことができます。
CREATE FUNCTION orders () RETURNS TABLE (orderid INTEGER, ...) LANGUAGE OLEDB EXTERNAL NAME '!orders!Provider=Microsoft.Jet.OLEDB.3.51; Data Source=c:\msdasdk\bin\oledb\nwind.mdb'; SELECT orderid, DATE(orderdate) AS orderdate, DATE(shippeddate) AS shippeddate FROM TABLE(orders()) AS t WHERE orderid = 10248;
EXTERNAL NAME 文節に接続ストリングを入れる代わりに、サーバー名を作成および使用することができます。たとえば、サーバー Nwind を OLE DB Provider のサーバー名の定義での説明のように定義してあるとすると、次の CREATE FUNCTION ステートメントを使用することができます。
CREATE FUNCTION orders () RETURNS TABLE (orderid INTEGER, ...) LANGUAGE OLEDB EXTERNAL NAME 'Nwind!orders';
OLE DB 表関数により、任意の文字ストリング・データ・タイプの入力パラメーターを 1 つ指定することもできます。入力パラメーターを使用して、 OLE DB Provider にコマンド・テキストを直接渡します。入力パラメーターを定義する場合、EXTERNAL NAME 文節に行セット名を指定しないでください。 DB2 は、実行するコマンド・テキストを OLE DB Provider に渡し、 OLE DB Provider は DB2 に行セットを戻します。結果として戻される行セットの列名とデータ・タイプは、 CREATE FUNCTION ステートメントの RETURNS TABLE 定義と互換性がある必要があります。行セットの列名とのバインドは、一致する列名に基づいているため、列を正しく命名していることを確かめる必要があります。
以下の例では、 Microsoft SQL Server 7.0(TM) データベースから保管情報を検索する OLE DB 表関数を登録します。 EXTERNAL NAME 文節に接続ストリングを指定します。表関数に、コマンド・テキストから OLE DB Provider に渡される入力パラメーターがあるため、 EXTERNAL NAME 文節では行セット名は指定されません。 SQL コマンド・テキストで照会の例が渡され、 SQL サーバー・データベースからの上位 3 つの保管についての情報が検索されます。
CREATE FUNCTION favorites (varchar(600)) RETURNS TABLE (store_id char (4), name varchar (41), sales integer) SPECIFIC favorites LANGUAGE OLEDB EXTERNAL NAME '!!Provider=SQLOLEDB.1;Persist Security Info=False; User ID=sa;Initial Catalog=pubs;Data Source=WALTZ; Locale Identifier=1033;Use Procedure for Prepare=1; Auto Translate=False;Packet Size=4096;Workstation ID=WALTZ; OLE DB Services=CLIENTCURSOR;'; SELECT * FROM TABLE (favorites (' select top 3 sales.stor_id as store_id, ' || ' stores.stor_name as name, ' || ' sum(sales. qty) as sales ' || ' from sales, stores ' || ' where sales.stor_id = stores.stor_id ' || ' group by sales.stor_id, stores.stor_name ' || ' order by sum(sales.qty) desc')) as f;
EXTERNAL NAME 文節の一部の行セットは、 完全修飾名 で識別される必要があります。完全修飾名には、以下のいずれかまたはその両方が組み込まれます。
OLE DB Provider によって提供されるカタログとスキーマ名のサポートについての情報は、 OLE DB Provider のリテラル情報の資料を参照してください。
ご使用のプロバイダーのリテラル情報で DBLITERAL_CATALOG_NAME が NULL でない場合、カタログ名と DBLITERAL_CATALOG_SEPARATOR の値を区切り記号として使用してください。完全修飾名の先頭または終わりのどちらにカタログ名を置くかを判別するには、 OLE DB Provider の特性セット DBPROPSET_DATASOURCEINFO にある DBPROP_CATALOGLOCATION の値を参照してください。
ご使用のプロバイダーのリテラル情報で DBLITERAL_SCHEMA_NAME が NULL でない場合、スキーマ名と DBLITERAL_SCHEMA_SEPARATOR の値を区切り記号として使用してください。
名前に特殊文字や突き合わせキーワードが含まれている場合、 OLE DB Provider に指定された引用符文字で名前を囲んでください。引用符文字は、OLE DB Provider のリテラル情報で、 DBLITERAL_QUOTE_PREFIX および DBLITERAL_QUOTE_SUFFIX として定義されます。たとえば、以下の EXTERNAL NAME では、指定された行セットには、authors と呼ばれる行セットのカタログ名 pubs とスキーマ名 dbo が含まれていて、その名前を囲むために引用符文字 " が使用されています。
EXTERNAL NAME '!"pubs"."dbo"."authors"!Provider=SQLOLEDB.1;...';
完全修飾名の構成の詳細については、 Microsoft OLE DB 2.0 Programmer's Reference and Data Access SDK, Microsoft Press, 1998 と、OLE DB Provider の資料を参照してください。
OLE DB Provider のサーバー名を定義するためには、 CREATE WRAPPER OLEDB ステートメントを使用して、データベースごとに OLE DB ラッパーを 1 つずつ登録しておく必要があります。 CREATE WRAPPER OLEDB の詳細については、 インストールおよび構成 補足 を参照してください。
多くの CREATE FUNCTION ステートメントに使用できる OLE DB データ・ソースのサーバー名を指定するには、 CREATE SERVER ステートメントを以下のように使用します。
たとえば、以下の CREATE SERVER ステートメントを使用して、 Microsoft Access OLE DB Provider のサーバー名 Nwind を定義することができます。
CREATE SERVER Nwind WRAPPER OLEDB OPTIONS (CONNECTSTRING 'Provider=Microsoft.Jet.OLEDB.3.51; Data Source=c:\msdasdk\bin\oledb\nwind.mdb');
サーバー名 Nwind を使用して、 CREATE FUNCTION ステートメントの OLE DB Provider を識別することができます。たとえば以下のとおりです。
CREATE FUNCTION orders () RETURNS TABLE (orderid INTEGER, ...) LANGUAGE OLEDB EXTERNAL NAME 'Nwind!orders';
CREATE SERVER ステートメントの完全な構文については、SQL 解説書 を参照してください。 OLE DB Provider のユーザー・マッピングの情報については、 ユーザー・マッピングの定義を参照してください。
DB2 ユーザーのユーザー・マッピング を指定して、代替ユーザー名およびパスワードを使用して OLE DB データ・ソースにアクセスできるようにします。特定のユーザーにユーザー名をマップするには、 CREATE USER MAPPING ステートメントを使用してユーザー・マッピングを定義することができます。すべてのユーザーによって共用されるユーザー・マッピングを提供するには、ユーザー名とパスワードを CREATE FUNCTION ステートメントまたは CREATE SERVER ステートメントの接続ストリングに追加します。たとえば、OLE DB サーバー Nwind 上で DB2 ユーザー JOHN に固有のユーザー・マッピングを作成するには、以下の CREATE USER MAPPING ステートメントを使用します。
CREATE USER MAPPING FOR john SERVER Nwind OPTIONS (REMOTE_AUTHID 'dave', REMOTE_PASSWORD 'mypwd');
OLE DB 表関数 orders を呼び出すすべての DB2 ユーザーに対して同等のアクセスを提供するには、 CREATE FUNCTION または CREATE SERVER ステートメントのどちらかで以下の CONNECTSTRING を使用します。
CREATE FUNCTION orders () RETURNS TABLE (orderid INTEGER, ...) LANGUAGE OLEDB EXTERNAL NAME '!orders!Provider=Microsoft.Jet.OLEDB.3.51;User ID=dave; Password=mypwd;Data Source=c:\msdasdk\bin\oledb\nwind.mdb';
DB2 は、以下のユーザー・マッピング規則を適用します。
CREATE USER MAPPING ステートメントの完全な構文については、 SQL 解説書 を参照してください。
以下の表では、DB2 データ・タイプを OLE DB データ・タイプにマップする方法が示されています。これについては Microsoft OLE DB 2.0 Programmer's Reference and Data Access SDK, Microsoft Press, 1998 に記載されています。マッピング表を使用して、OLE DB 表関数に適切な RETURNS TABLE 列を定義します。たとえば、データ・タイプ INTEGER の列を使用して OLE DB 表関数を定義する場合、 DB2 は OLE DB プロバイダーからのデータを DBTYPE_I4 として要求します。
OLE DB Provider ソース・データ・タイプから OLE DB データ・タイプへのマッピングについては、 OLE DB Provider の資料を参照してください。 ANSI SQL、Microsoft Access、および Microsoft SQL Server プロバイダーが、それぞれのデータ・タイプを OLE DB データ・タイプにマップする方法の例については、 Microsoft OLE DB 2.0 Programmer's Reference and Data Access SDK, Microsoft Press, 1998 を参照してください。
表 18. DB2 データ・タイプの OLE DB へのマッピング
DB2 データ・タイプ | OLE DB データ・タイプ |
---|---|
SMALLINT | DBTYPE_I2 |
INTEGER | DBTYPE_I4 |
BIGINT | DBTYPE_I8 |
REAL | DBTYPE_R4 |
FLOAT/DOUBLE | DBTYPE_R8 |
DEC (p, s) | DBTYPE_NUMERIC (p, s) |
DATE | DBTYPE_DBDATE |
TIME | DBTYPE_DBTIME |
TIMESTAMP | DBTYPE_DBTIMESTAMP |
CHAR(N) | DBTYPE_STR |
VARCHAR(N) | DBTYPE_STR |
LONG VARCHAR | DBTYPE_STR |
CLOB(N) | DBTYPE_STR |
CHAR(N) FOR BIT DATA | DBTYPE_BYTES |
VARCHAR(N) FOR BIT DATA | DBTYPE_BYTES |
LONG VARCHAR FOR BIT DATA | DBTYPE_BYTES |
BLOB(N) | DBTYPE_BYTES |
GRAPHIC(N) | DBTYPE_WSTR |
VARGRAPHIC(N) | DBTYPE_WSTR |
LONG GRAPHIC | DBTYPE_WSTR |
DBCLOB(N) | DBTYPE_WSTR |
注: | OLE DB データ・タイプ変換規則は、
Microsoft OLE DB 2.0 Programmer's Reference
and Data Access SDK, Microsoft Press, 1998 で定義されています。以下に例を示します。
|