その他のXLA機能

その他のXLA機能は、ブックマークの位置の変更、およびアプリケーション・コンテキストの受渡しです。

ブックマークの位置の変更

接続中は、随時ttXlaGetLSN関数をコールして現行読取りログ・レコード識別子に関してシステムに問い合せることができます。

「ttXlaGetLSN」を参照してください。

一連の更新を繰り返し実行する必要がある場合は、ttXlaSetLSN関数を使用して、現行読取りログ・レコード識別子を最後のttXlaAcknowledgeコールによって設定された初期読取りログ・レコード識別子より大きい有効な値に再設定できます。ここで、「大きい」とは、比較対象のログ・レコード識別子が同じトランザクション内のレコードのものである場合にのみ意味を持ちます。そうでない場合、ログ・レコード識別子の数値が大きいとしても、別のトランザクションより前にコミットされたトランザクションのログ・レコード識別子は「より小さい」ログ・レコード識別子になります。初期読取りログ・レコード識別子を現行読取りログ・レコード識別子まで進める方法は、ttXlaAcknowledge関数をコールする方法のみで、この関数によって、現行読取りログ・レコード識別子までのすべてのトランザクション・ログ・レコードを取得および処理したということが示されます。特定のブックマークに対してttXlaAcknowledgeをコールすると、現行読取りログ・レコード識別子より小さいログ・レコード識別子を持つトランザクション・ログ・レコードにアクセスできなくなります。

アプリケーション・コンテキストの受渡し

XLA関数ではありませんが、トランザクション・ログに対するライターでttApplicationContext組込みプロシージャをコールして、アプリケーションに関連付けられているバイナリ・データをXLAリーダーに渡すことができます。

ttApplicationContext組込みプロシージャにより、現在のトランザクションによって生成される次の更新レコードで返される、1つのVARBINARY値を指定します。XLAリーダーでは、「NOT INLINE可変長列データの読取り」で説明されている方法で、この値へのポインタを取得できます。

ノート:

コンテキスト値は、1つの更新レコードにのみ適用されます。適用後に値が再設定されます。同じコンテキスト値を複数の更新に適用する場合は、各更新の前に再設定する必要があります。

コンテキストを設定するには、次の手順を実行します。

  1. ttApplicationContextプロシージャを起動するために2つのプログラム変数を宣言します。変数contextBufferは、最も長いアプリケーション・コンテキストを格納できる十分な大きさを持つように宣言されたCHAR配列です。contextBufferLenは、INTEGER型の変数で、ttApplicationContextへの各コールでコンテキストの実際の長さを伝えるために使用されます。
  2. ttApplicationContext組込みプロシージャのコンパイル済の起動によって文ハンドルを初期化します。
    rc = SQLPrepare(hstmt, "call ttApplicationContext(?)", SQL_NTS);
    rc = SQLBindParameter(hstmt, 1, SQL_PARAM_INPUT, SQL_C_BINARY,
                          SQL_VARBINARY, 0, 0, &contextBuffer,
                          sizeof contextBuffer, &contextBufferLen);
  3. アプリケーション・コンテキストを後で設定する必要がある場合は、コンテキスト値をcontextBufferにコピーし、コンテキストの長さをcontextBufferLenに割り当て、次のコールを使用してttApplicationContextを起動します。
    rc = SQLExecute(hstmt);

    トランザクションは、SQLTransactへの通常のコールでコミットされます。

    rc = SQLTransact(NULL, hdbc, SQL_COMMIT);

    ノート:

    ttApplicationContextをコールした後にSQL処理に失敗すると、コンテキストが次のSQL処理に渡されず、失われる可能性があります。このような問題が発生した場合は、アプリケーションで、次のSQL処理の前にttApplicationContextを再度コールできます。