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 事件 » 同步事件

 

modify_last_download_timestamp 连接事件

该脚本可用于修改当前同步的上次下载时间。

参数

在下表中,说明部分提供 SQL 数据类型。如果您使用 Java 或 .NET 编写脚本,则应该使用相应的数据类型。请参见SQL-Java 数据类型SQL-.NET 数据类型

在 SQL 脚本中,可以使用名称或问号指定事件参数,但不能在一个脚本中混合使用名称和问号。如果使用问号,则参数必须按照如下所示的顺序并且仅当没有指定任何后继参数时才是可选的(例如,如果您想使用参数 2,则必须使用参数 1)。如果使用命名参数,则可以按照任何顺序指定任意参数子集。

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),以使下一个同步下载所有数据。

modify_last_download_timestamp 事件的 SQL 脚本必须作为存储过程实现。MobiLink 服务器传入 last_download 时间戳作为传递给存储过程的第一个参数,并用该存储过程传出的第一个值替换该时间戳。

该脚本紧接 prepare_for_download 脚本之前在同一事务中执行。

另请参见
SQL 示例

以下 SQL 语句创建一个存储过程。以下语法用于 Oracle 统一数据库:

CREATE PROCEDURE ModifyDownloadTimestamp(
        download_timestamp  OUT DATE,
        user_name   IN VARCHAR )
        AS
        BEGIN
         -- N is the maximum replication latency in the consolidated cluster
        download_timestamp := download_timestamp - N;
        END;

以下语法用于 SQL Anywhere、Adaptive Server Enterprise 和 SQL Server 统一数据库:

CREATE PROCEDURE ModifyDownloadTimestamp
        @download_timestamp DATETIME OUTPUT,
        @t_name    VARCHAR( 128 )
        AS
        BEGIN
         -- N is the maximum replication latency in consolidated cluster
        SELECT @download_timestamp = @download_timestamp - N
        END

以下语法用于 DB2 主机统一数据库:

CREATE PROCEDURE modify_ldts( 
        OUT ts      TIMESTAMP,
        IN  t_name  VARCHAR(128) )
        LANGUAGE SQL
        BEGIN
            set ts = TIMESTAMP_FORMAT('2000-01-02 03:04:05','YYYY-MM-DD HH24:MI:SS');
        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} ) }' )
Java 示例

以下对 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 ); 
}
.NET 示例

以下对 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(
  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 );
}