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

SQL Anywhere 11.0.1 (中文) » MobiLink - 客户端管理 » 用于 MobiLink 的 SQL Anywhere 客户端 » SQL Anywhere 客户端的事件挂接

 

sp_hook_dbmlsync_delay

您可以使用此存储过程控制同步发生的时间。

#hook_dict 表中各行

名称

说明

delay duration (in|out)

秒数

如果该过程将 delay duration 的值设置为零,则 dbmlsync 同步将继续。非零的 delay duration 值指定再次调用延迟挂接前的秒数。

maximum accumulated delay (in|out)

秒数

最大积累延迟指定每次同步前的最大秒数。Dbmlsync 跟踪从上一次同步以来所有延迟挂接调用产生的总延迟。如果从 dbmlsync 开始运行以来没有同步发生,则总延迟从 dbmlsync 开始的时刻起计算。总延迟超过最大积累延迟的值时,将开始执行同步而不调用延迟挂接。

publication_n (in)

发布

正被同步的发布,其中 n 是一个整数。每个正在上载的发布都有一个 publication_n 条目。n 的编号从零开始。

MobiLink user ( in )

MobiLink 用户名

您正在为其进行同步的 MobiLink 用户。

script version (in)

脚本版本名称

将用于同步的 MobiLink 脚本版本。

注释

如果存在以该名称命名的过程,则会在同步过程开始时在 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