在即将调用挂接时,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 |
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |