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 客户端的事件挂接 » dbmlsync 挂接简介 » 使用事件挂接过程

 

#hook_dict 表

在即将调用挂接时,dbmlsync 会使用以下的 CREATE 语句在远程数据库中创建 #hook_dict 表。表名前的 # 表示此表为临时表。

CREATE TABLE #hook_dict(
name VARCHAR(128) NOT NULL UNIQUE,
value VARCHAR(10240) NOT NULL)

dbmlsync 实用程序使用 #hook_dict 表将值传递给挂接函数,而挂接函数使用 #hook_dict 表将值传递回 dbmlsync。

每个挂接都接收参数值。在某些情况下,您可以修改此值以返回一个新值,而有些值是只读的。表中的每一行都包含一个参数值。

例如,对于以下的 dbmlsync 命令行,在调用 sp_hook_dbmlsync_abort 挂接时,#hook_dict 表将包含以下行:

dbmlsync -c 'dsn=MyDsn' -n pub1,pub2 -u MyUser

#hook_dict 行

publication_0

pub1

publication_1

pub2

MobiLink user

MyUser

Abort synchronization

false

中止挂接可以从 #hook_dict 表中检索值,并使用检索到的值对行为进行自定义。例如,您可以使用如下 SELECT 语句检索 MobiLink 用户:

SELECT value
FROM #hook_dict
WHERE name = 'MobiLink user'

您可以使用挂接更新输入/输出参数,从而修改 dbmlsync 的行为。例如,通过使用如下语句更新表的 abort synchronization 行,您可以使用挂接指示 dbmlsync 中止同步:

UPDATE #hook_dict
SET value='true'
WHERE name='abort synchronization'

每个挂接的描述都列出了 #hook_dict 表中的行。

示例

以下的示例 sp_hook_dbmlsync_delay 过程说明如何使用 #hook_dict 表来传递参数。此过程只允许在 MobiLink 系统的调度关机时间(18:00 至 19:00)以外进行同步。

CREATE PROCEDURE sp_hook_dbmlsync_delay()
BEGIN
   DECLARE delay_val integer;
 SET delay_val=DATEDIFF(
   second, CURRENT TIME, '19:00');
 IF (delay_val>0 AND
     delay_val<3600)
 THEN
 UPDATE #hook_dict SET value=delay_val
   WHERE name='delay duration';
 END IF;
END

以下过程将于同步开始时在远程数据库中执行。它将检索当前的 MobiLink 用户名(sp_hook_dbmlsync_begin 事件的可用参数之一),并将其显示在 SQL Anywhere 消息窗口中。

CREATE PROCEDURE sp_hook_dbmlsync_begin()
BEGIN
   DECLARE syncdef VARCHAR(150);
   SELECT '>>>syncdef = ' || value INTO syncdef
      FROM #hook_dict
      WHERE name ='MobiLink user name';
   MESSAGE syncdef TYPE INFO TO CONSOLE;
END