每当 MobiLink 同步
服务器在同步过程中遇到错误时都执行handle_error连接事件
。如果未定义 handle_error 脚本或此脚本导致错误
,则缺省动作代码是 3000:回退当前事务并取消当前同步
。
通常情况下
,每个
SQL 操作只会出现一个错误,但也可能出现多个。在一组错误中每出现一次错误时都会调用一次 handle_error 脚本。传递到第一个错误的动作代码是 3000,后续调用是在前一次调用所返回的动作代码中传递的。MobiLink 将使用多个调用所返回的值中的最大值。
您可以修改脚本中的动作代码并返回一个值以指示 MobiLink 如何继续。动作代码参数可以使用以下数值:
*1000 跳过当前行并继续执行。
*3000 回退当前事务并取消当前同步。这是缺省动作代码,在未定义 handle_error 脚本或此脚本导致错误时将使用此代码。
*4000 回退当前事务,取消同步并关闭 MobiLink 同步
服务器。
handle_error 事件的
SQL 脚本必须作为存储过程执行。
如果错误是作为同步的一部分发生的,则提供用户名。否则该值为空。
如果在操作某一特定表时发生错误,则提供表名称。否则该值为空。表名称是客户端应用程序中表的名称。该名称在统一数据库中是否存在直接对应的名称取决于同步系统的设计。动作代码将告知 MobiLink 同步服务器下一步该做什么。在调用此脚本之前,MobiLink 同步服务器将动作代码设置为缺省值,该缺省值的大小取决于错误的严重程度。您可以使用脚本修改该值。脚本必须返回或设置一个动作代码。
在本例中,我们故意在针对emp表的download_cursor事件中输入错误脚本,让MobiLink在同步的过程中出错。然而,我们进一步在handle_error连接事件中加入了对错误处理的相应脚本,处理错误后,返回值为1000,MobiLink将忽略当前错误,继续运行。
本部分的脚本如下:
对remote:
CREATE PUBLICATION Lab_06
(
TABLE emp
)
CREATE SYNCHRONIZATION USER "demo06"
CREATE SYNCHRONIZATION SUCRIPTION TO Lab_06
FOR "demo06"
TYPE 'TCPIP'
ADDRE 'host=localhostort=2439'
OPTION ScriptVersion='demo06'
对center:
CALL ml_add_table_script(
'demo06',
'emp',
'download_cursor',
'SELECT * FROM empxxxxxxx'
);
COMMIT
ALTER PROCEDURE MLHandleError(
OUT @action INTEGER,
IN @error_code INTEGER,
IN @error_meage VARCHAR(1000),
IN @user_name VARCHAR(128),
IN @table_name VARCHAR(128))
BEGIN
COMMIT;
SET @action = 1000;
END
CALL ml_add_coection_script(
'demo06',
'handle_error',
'CALL MLHandleError(?,?,?,?,?)')
COMMIT