原典情報: $ORACLE_HOME\oledb\readme.txt
このドキュメントには、Oracle Provider for OLE DBのドキュメントの補足情報が記載されています。
Oracle Provider for OLE DB(OraOLEDB)プロバイダは、COMコンポーネントであり、1台のマシンで一度に1つのバージョンのみアクティブにできます。
Oracle Provider for OLE DBのサンプル・コード、最新のパッチおよびその他の技術情報については、http://otn.oracle.com/tech/windows/ole_db/を参照してください。
パフォーマンスを向上させるため、LONG列またはLONG RAW列にはADOメソッドAppendChunkを使用しないでください。 かわりに、ADOのAddNewまたはUpdateメソッドを使用して、LONG列またはLONG RAW列全体を挿入または更新します。
OraOLEDBドライバでのオプティマイザ・ヒント構文には、/*+ ... */を使用します。 ヒント構文--+ ...は、現在サポートされていません。
MicrosoftのOLE DB .NET Data Providerに関する既知の制限のため、OLE DB .NET Data ProviderでのLongVarChar、LongVarWChar、LongVarBinaryおよびBSTRのIN/OUTおよびOUTパラメータ型は、Providerでサポートされていません。
Trusted OracleのMLSLABELデータ型は、OraOLEDBドライバでサポートされていません。
オブジェクト・データ型は、Providerで現在サポートされていません。
現在、一度に複数の行のLOBを更新すると、コマンド・オブジェクトでエラーが発生します。
例:
UPDATE SomeTable SET LobCol = ? WHERE ...
このUPDATE文が表の複数の行に影響する場合、エラーが発生します。 この制限はLOB(BLOB/CLOB)に限られており、LONG(LONG/LONG RAW)は対象外です。
LOB書込み操作(INSERTおよびUPDATE)は、Provider内の複数の書込み操作を伴うことが多いため、このような操作にはトランザクションを有効にすることをお薦めします。 トランザクションを有効にすると、失敗した場合にコンシューマで書込み操作全体をロールバックできます。 コマンド・オブジェクトまたはレコードセット・オブジェクトからLOBを書き込む場合は、この方法をお薦めします。
Oracleデータベース・リンクが含まれる問合せを使用した行セットの作成を有効にするには、接続文字列属性DistribTxを無効にする必要があります。 現在、このような行セットは読取り専用に制限されています。
ローカル・トランザクションまたはグローバル・トランザクションの実行中に、コマンド・インタフェースを使用してSQLのCOMMIT、ROLLBACKまたはSAVEPOINTを実行しないでください。実行すると、行セットのデータの整合性に影響を与える可能性があります。 この明示的なトランザクション・モードでDDL(CREATE TABLE、ALTER VIEWなど)を実行した場合にも同じことが当てはまります。OracleではDDLがデータベースに対して暗黙的なコミットを実行するためです。 DDLは自動コミット・モードでのみ実行してください。
自律型トランザクションのサポートを有効にするには、接続文字列属性DistribTxを無効にする必要があります。 コンシューマはこの機能を使用して、COMMITまたはROLLBACK(あるいはその両方)が含まれるストアド・プロシージャを実行できます。
ストアド・プロシージャ内のコミットまたはロールバックの実行は、慎重に行う必要があります。 OraOLEDBでは、行セットに対するトランザクション機能が提供されており、行セットのデータはクライアント側にローカルにキャッシュされるため、行セットがオープンしている状態でストアド・プロシージャ内のコミットまたはロールバックを明示的に実行すると、行セットとデータベースが非同期になる可能性があります。 このような場合は、すべてのコミットおよびロールバック(中断)をクライアント側から実行する必要があります(con.Commitまたはcon.Abort)。 これに対する例外は、ユーザーがストアド・プロシージャで自律型トランザクションを使用している場合です。 この機能を使用すると、ストアド・プロシージャ内のトランザクションはメイン・トランザクションから分離されるため、ローカライズされたコミットまたは中断が可能になります。
自律型トランザクションの詳細は、Oracle Database 11g リリース2の『Oracle Databaseアドバンスト・アプリケーション開発者ガイド』および『Oracle Database PL/SQL言語リファレンス』を参照してください (http://www.oracle.com/pls/db112/homepage)。
オーバーロードのPL/SQLストアド・プロシージャおよびファンクションでは、PROCEDURE_PARAMETERSスキーマ行セットは、最初のオーバーロードのストアド・プロシージャおよびファンクションに関するパラメータ情報のみを返します。 これは現在、OLE DB仕様にはオーバーロードのプロシージャおよびファンクションに対するプロビジョニングがないためです。
現在、OraOLEDBでは、スキーマ行セット制限に指定されたオブジェクトの大/小文字が、データベースと正確に一致している必要があります。 したがって、表EMPにアクセスする際にempを渡すことはサポートされていません。
例:
Dim restrictions As Variant ... ' Schemarowset contains table EMP owned by SCOTT restrictions = Array(Empty, "SCOTT", "EMP", Empty) Set objRst = objCon.OpenSchema(adSchemaTables, restrictions) ... ' Schemarowset created with no rows restrictions = Array(Empty, "scott", "emp", Empty) Set objRst = objCon.OpenSchema(adSchemaTables, restrictions) ...
Microsoft ActiveX Data ObjectsライブラリおよびMicrosoft ActiveX Data Objects Recordsetライブラリをプロジェクトの参照として含める必要があります。
OraOLEDB.hをVC++プロジェクトの関連.cppファイルに含める必要があります。 また、プロジェクトのいずれかの.cppファイルに、#define DBINITCONSTANTSを追加する必要があります。