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

 

upload_old_row_insert 表事件

用于基于语句的上载的冲突解决脚本通常要求访问从远程数据库上载的行的旧值及新值。此事件可用于处理从远程数据库中上载的行的旧值。

参数

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

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

SQL 脚本的参数名称 说明 顺序

s.remote_id

VARCHAR(128)。MobiLink 远程 ID。只有在使用命名参数时才能引用远程 ID。

不适用

s.username

VARCHAR(128)。MobiLink 用户名。此参数是可选的。

可选

r.pk-column-1

旧(前映像)行的列值,其中已命名的参数被指定为以 r. 开头的列名

1(如果引用用户名则为 2)

... ...

r.pk-column-N

旧(前映像)行的列值,其中已命名的参数被指定为以 r. 开头的列名

N(如果引用用户名则为 N + 1)

r.column-1

旧(前映像)行的列值,其中已命名的参数被指定为以 r. 开头的列名

N + 1(如果引用用户名则为 N+2)
... ... ...
r.column-M

旧(前映像)行的列值,其中已命名的参数被指定为以 r. 开头的列名

N + M(如果引用用户名则为 N+M+1)
缺省操作

无。

注释

在 MobiLink 客户端向 MobiLink 服务器发送一个更新后的行时,发送的数据中不仅包含该行的新值(后映像),而且还将包含旧行值的副本(前映像)。前映像与统一数据库中的当前值不匹配时,则会检测到冲突。

此事件允许您将前映像的值保存到表中。此事件可以帮助您为基于语句的更新开发冲突解决过程。在对相应的统一数据库表执行更新之前,此事件的参数将保存远程数据库中的旧行值。此事件也可用于在基于语句的强制冲突模式中插入行。

此事件的脚本通常是一条插入语句,它将旧行插入到临时表中以供 resolve_conflict 脚本使用。

您可以为远程数据库的每个表编写一个 upload_old_row_insert 脚本。

对于 Java 和 .NET 应用程序,此脚本必须返回有效的 SQL。

另请参见
SQL 示例

此示例处理远程数据库中对 product 表进行的更新。该脚本将旧的行值插入到名为 product_conflict 的全局临时表中。表的最后一列将该行标识为旧行。

CALL ml_add_table_script(
 'ver1',
 'table1',
 'upload_old_row_insert',
 'INSERT INTO DBA.product_conflict (
   id, 
   name, 
   size, 
   quantity, 
   unit_price, 
   row_type )
  VALUES ( 
   {ml r.id}, 
   {ml r.name}, 
   {ml r.size}, 
   {ml r.quantity}, 
   {ml r.unit_price}, 
   ''Old'' )' )
Java 示例

以下对 MobiLink 系统过程的调用在同步脚本版本 ver1 时将名为 uploadOldRowInsertTable 的 Java 方法注册为 upload_old_row_insert 表事件的脚本。

CALL ml_add_java_table_script(
  'ver1',
  'table1',
  'upload_old_row_insert',
  'ExamplePackage.ExampleClass.uploadOldRowInsertTable'
)

以下是 Java 方法 uploadOldRowInsertTable 示例。它动态生成 INSERT 语句。

public String uploadOldRowInsertTable() {
  return( "old" + getCols(_curTable) +
    "values" + getNamedParams(_curTable)); 
}
.NET 示例

以下对 MobiLink 系统过程的调用在同步脚本版本 ver1 时将名为 UploadOldRowInsertTable 的 .NET 方法注册为 upload_old_row_insert 表事件的脚本。

CALL ml_add_dnet_table_script(
  'ver1',
  'table1',
  'upload_old_row_insert',
  'TestScripts.Test.UploadOldRowInsertTable'
)

以下是 .NET 方法 UploadOldRowInsertTable 示例。它动态生成 UPLOAD 语句。

public string UploadOldRowInsertTable() {
  return( "old" + GetCols(_curTable) +
    "values" + GetNamedParams(_curTable)); 
}