ホスト言語プログラムにSQL文を埋め込む場合は、いくつかの要素について考慮します。以降の項では、2フェーズ・コミットのプロトコルの使用方法と、DECLARE MODULE文の句を埋め込んでキャラクタ・セット、引用ルール、デフォルトの日付書式などを指定する方法について説明します。
4.1.1 ホスト言語コードへのモジュール句の埋込み
DECLARE MODULE文のモジュール句をホスト言語プログラムに組み込むと、次の要素を制御できます。
DECLARE MODULE文のモジュール句の使用方法の詳細は、「DECLARE MODULE文」を参照してください。
4.1.2 埋込みプログラムの2フェーズ・コミットのプロトコルの使用
プリコンパイルされたSQLの使用時には、2フェーズ・コミットのプロトコルを明示的に使用できます。これを実行するには、アプリケーションがトランザクション・マネージャを明示的にコールして、コンテキスト構造体を宣言する必要があります。コンテキスト構造体には、その要素の1つとして分散トランザクション識別子(TID)が含まれます。さらに、分散トランザクションに関与する大部分の実行SQL文では、USING CONTEXT句が指定されている必要があります。USING CONTEXT句は、コンテキスト構造体をSQL文に関連付けます。第2.9節には、コンテキスト構造体を取得しない非実行可能文がリストされています。
次の構文図は、分散トランザクションの一部である埋込みSQL文の形式を示しています。
たとえば、次の埋込みSQL文は、分散トランザクションの一部としてカーソルをオープンします。
EXEC SQL USING CONTEXT :DISTR_TRANS OPEN CURSOR1 |
分散トランザクションではバッチ更新トランザクションを使用できないため、バッチ更新トランザクションを開始する前にSQL$DISABLE_CONTEXT論理名をTRUEに定義する必要があります。(分散トランザクションでは、トランザクションがロールバック可能であることが必要です。バッチ更新トランザクションではリカバリ・ユニット・ジャーナル・ファイル(.ruj)への書込みが行われないため、ロールバックできません。)
バッチ更新トランザクションを使用して分散トランザクションの開始を試行した場合の結果は、次に示すように、DECdtmシステム・サービスのコールを暗黙的または明示的のどちらで行うか、およびトランザクションの開始に何のSQL文を使用するかによって異なります。
2フェーズ・コミットのプロトコルは分散トランザクションにのみ適用されます。分散トランザクションの詳細は、『Oracle Rdb7 Guide to Distributed Transactions』を参照してください。