Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.
数据脚本,用以定义游标以选择要从远程数据库中删除的行。
在 SQL 脚本中,可以按名称或使用问号指定事件参数。不建议使用问号,建议您使用命名参数。不能在一个脚本中混合使用名称和问号。如果使用问号,则参数必须按照如下所示的顺序并且仅当没有指定任何后继参数时才是可选的(例如,如果您想使用参数 2,则必须使用参数 1)。如果使用命名参数,则可以按照任何顺序指定任意参数子集。
s.last_table_download
TIMESTAMP。表的上一次下载时间。
1
s.username
VARCHAR(128)。MobiLink 用户名。
2
无。
MobiLink 服务器打开一个只读游标,以读取将要下载然后从远程数据库中删除的行的列表。此脚本必须包含一个 SELECT 语句,该语句必须能够返回将要从远程数据库的表中删除的行的主键值。
您可以为远程数据库的每个表编写一个 download_delete_cursor 脚本。
如果在 download_delete_cursor 中某个表的一个或多个行的主键列为空,则 MobiLink 服务器将通知远程数据库删除该表中的所有行。 请参见删除表中的所有行。
统一数据库中删除的行不会出现在 download_delete_cursor 事件定义的结果集中,因此不会从远程数据库中自动删除。一个用于标识将要从远程数据库中删除的行的方法是向统一数据库表添加一列,用以将行标识为非活动。
要避免下载不必要的行带来删除操作,可考虑使用基于时间戳的下载。在 download_delete_cursor 脚本的 WHERE 子句中包含类似以下内容的行:
AND last_modified >= {ml s.last_table_download}
该脚本必须以 SQL 实现。 对于行的 Java 或 .NET 处理,请参见直接行处理。
在 download_delete_cursor 中使用 READPAST 表提示可能会有问题。有关详细信息,请参见 download_cursor 事件。
此示例来自 Contact 示例,并可在 Samples\MobiLink\Contact\build_consol.sql 中找到。它从远程数据库中删除满足下列条件的所有客户:自从上次该用户下载数据后已更改 (Customer.last_modified >= {ml s.last_table_download}),并且
Customer.last_modified >= {ml s.last_table_download}
不属于正在同步的用户 (SalesRep.username != {ml s.username}),或者
SalesRep.username != {ml s.username}
在统一数据库中被标记为非活动状态 (Customer.active = 0)。
Customer.active = 0
CALL ml_add_table_script( 'ver1', 'table1', 'download_delete_cursor', 'SELECT cust_id FROM Customer key join SalesRep WHERE Customer.last_modified >= {ml s.last_table_download} AND ( SalesRep.username != {ml s.username} OR Customer.active = 0 )')