该脚本可用于修改当前同步的上次下载时间。
在下表中,说明部分提供 SQL 数据类型。如果您使用 Java 或 .NET 编写脚本,则应该使用相应的数据类型。 请参见SQL-Java 数据类型和SQL-.NET 数据类型。
在 SQL 脚本中,可以按名称或使用问号指定事件参数。不建议使用问号,建议您使用命名参数。不能在一个脚本中混合使用名称和问号。如果使用问号,则参数必须按照如下所示的顺序并且仅当没有指定任何后继参数时才是可选的(例如,如果您想使用参数 2,则必须使用参数 1)。如果使用命名参数,则可以按照任何顺序指定任意参数子集。
SQL 脚本的参数名称 | 说明 | 顺序(不建议用于 SQL) |
---|---|---|
s.last_download |
TIMESTAMP。任何已同步表的上一次下载时间。这是一个 INOUT 参数。 |
1 |
s.remote_id |
VARCHAR(128)。MobiLink 远程 ID。只有在使用命名参数时才能引用远程 ID。 |
不适用 |
s.username |
VARCHAR(128)。MobiLink 用户名。 |
2 |
无。
该脚本可用于修改当前同步的 last_download 时间戳。如果定义了此脚本,则 MobiLink 服务器将使用修改过的 last_download 时间戳作为传递到下载脚本的 last_download 时间戳。此脚本的一种典型应用是恢复远程数据库上的丢失数据。您可以将 last_download 时间戳重置为早期的时间(例如 1900-01-01 00:00),以使下一个同步下载所有数据。同样,当统一表的更新可使用早于实际更新的时间进行时间戳标记时,例如通过 DBMS 复制,本脚本让你调整上次下载时间以避免在下载中遗漏这些更新。
modify_last_download_timestamp 事件的 SQL 脚本必须作为存储过程实现。
该脚本紧接 prepare_for_download 脚本之前在同一事务中执行。
以下 SQL 语句创建一个存储过程。以下语法用于 Oracle 统一数据库。在 Oracle 中创建可以输入参数然后将其传出的存储过程时,应确保将该参数标记为 IN OUT,如下所示:
CREATE OR REPLACE PROCEDURE ModifyDownloadTimestamp ( download_timestamp IN OUT TIMESTAMP, user_name IN VARCHAR) AS BEGIN -- N is the maximum replication latency in consolidated cluster download_timestamp := download_timestamp - 1; END; |
以下语法用于 SQL Anywhere、Adaptive Server Enterprise 和 SQL Server 统一数据库:
CREATE PROCEDURE ModifyDownloadTimestamp @download_timestamp DATETIME OUTPUT, @user_name VARCHAR( 128 ) AS BEGIN -- N is the maximum replication latency in consolidated cluster SELECT @download_timestamp = @download_timestamp - N END |
以下对 MobiLink 系统过程的调用将 ModifyDownloadTimestamp 存储过程指派给 modify_last_download_timestamp 事件。以下语法用于 SQL Anywhere 统一数据库:
CALL ml_add_connection_script( 'my_version', 'modify_last_download_timestamp', '{CALL ModifyDownloadTimestamp( {ml s.last_download}, {ml s.username} ) }' ) |
以下对 MobiLink 系统过程的调用在同步脚本版本 ver1 时将名为 modifyLastDownloadTimestamp 的 Java 方法注册为 modify_last_download_timestamp 连接事件的脚本。
CALL ml_add_java_connection_script( 'ver1', 'modify_last_download_timestamp', 'ExamplePackage.ExampleClass.modifyLastDownloadTimestamp' ) |
以下是 Java 方法 modifyLastDownloadTimestamp 示例。它输出当前新的时间戳并修改传入的时间戳。
public String modifyLastDownloadTimestamp( Timestamp lastDownloadTime, String userName ) { java.lang.System.out.println( "old date: " + lastDownloadTime.toString() ); lastDownloadTime.setDate( lastDownloadTime.getDate() -1 ); java.lang.System.out.println( "new date: " + lastDownloadTime.toString() ); return( null ); } |
以下对 MobiLink 系统过程的调用在同步脚本版本 ver1 时将名为 ModifyLastDownloadTimestamp 的 .NET 方法注册为 modify_last_download_timestamp 连接事件的脚本。
CALL ml_add_dnet_connection_script( 'ver1', 'modify_last_download_timestamp', 'TestScripts.Test.ModifyLastDownloadTimestamp' ) |
以下是 .NET 方法 ModifyLastDownloadTimestamp 示例。
public string ModifyLastDownloadTimestamp( ref DateTime lastDownloadTime, string userName ) { System.Console.WriteLine( "old date: " + last_download_time.ToString() ); last_download_time = DateTime::Now; System.Console.WriteLine( "new date: " + last_download_time.ToString() ); return( null ); } |
![]() |
使用DocCommentXchange讨论此页。
|
版权 © 2012, iAnywhere Solutions, Inc. - SQL Anywhere 12.0.1 |