Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (日本語) » Mobile Link - クライアント管理 » Mobile Link 用 SQL Anywhere クライアント » SQL Anywhere クライアントのイベント・フック

 

sp_hook_dbmlsync_delay

このストアド・プロシージャを使用して、同期が行われるタイミングを制御します。

#hook_dict テーブルのロー

名前

説明

delay duration (in|out)

秒数

プロシージャが delay duration の値を 0 に設定すると、dbmlsync の同期が進行します。delay duration が 0 以外の値の場合は、遅延フックが再び呼び出されるまでの秒数を示します。

maximum accumulated delay (in|out)

秒数

最大累積遅延は、各同期前の最大秒数を指定します。dbmlsync は、最後に実行された同期以降の遅延フックへのすべての呼び出しによって生じた合計遅延時間を追跡します。dbmlsync が実行を開始してから同期が行われないと、dbmlsync の起動時間から合計遅延時間が計算されます。合計遅延時間が Maximum Accumulated delay 値を上回ると、遅延フックを呼び出さずに同期が開始されます。

publication_n (in)

パブリケーション名

同期されているパブリケーション (n は整数)。アップロードされるパブリケーションごとに 1 つの publication_n エントリがあります。n の番号は 0 から始まります。

MobiLink user (in)

Mobile Link ユーザ名

同期対象となる Mobile Link ユーザ。

script version (in)

スクリプト・バージョン名

同期に使用される Mobile Link スクリプト・バージョン。

備考

この名前のプロシージャが存在する場合、同期処理の開始時の、sp_hook_dbmlsync_begin の前に呼び出されます。

このプロシージャのアクションは、実行直後にコミットされます。

参照

次のテーブルを使用して、リモート・データベース上の注文のログを取るとします。

CREATE TABLE OrdersTable(
  "id" INTEGER PRIMARY KEY DEFAULT AUTOINCREMENT,
  "priority" VARCHAR(128) 
);

次に、最大累積遅延 (1 時間) の間、同期を遅らせる例を示します。10 秒ごとにフックが呼び出され、OrdersTable 内に優先度の高いローがないかをチェックします。優先度の高いローが存在する場合、遅延期間は 0 に設定して同期処理を開始します。

CREATE PROCEDURE sp_hook_dbmlsync_delay()
BEGIN
      -- Set the maximum delay between synchronizations
    -- or before the first synchronization starts to 1 hour
    UPDATE #hook_dict SET value = '3600'  // 3600 seconds
     WHERE name = 'maximum accumulated delay';

    -- check if a high priority order exists in OrdersTable
    IF EXISTS (SELECT * FROM OrdersTable where priority='high') THEN
     -- start the synchronization to process the high priority row
     UPDATE #hook_dict
      SET value = '0'
      WHERE name='delay duration';
    ELSE
     -- set the delay duration to call this procedure again
     -- following a 10 second delay
     UPDATE #hook_dict
      SET value = '10'
      WHERE name='delay duration';
    END IF;
END;

sp_hook_dbmlsync_end フックでは、優先度の高いローを処理済みとしてマークすることができます。

CREATE PROCEDURE sp_hook_dbmlsync_upload_end()
     BEGIN
         IF EXISTS( SELECT value FROM #hook_dict
      WHERE name = 'Upload status'
      AND value = 'committed' ) THEN
      UPDATE OrderTable SET priority = 'high-processed'
     WHERE priority = 'high';
         END IF;
     END;

sp_hook_dbmlsync_endを参照してください。