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_update 表事件

为 MobiLink 服务器提供一个在上载处理过程中使用的事件,该事件用于处理在远程数据库中进行更新的行。

参数
参数 顺序
r.column-1 1
... ...
r.column-M M
r.pk-column-1 M + 1
... ...
r.pk-column-N M + N
o.column-N M + N + 1
... ...
o.column-M M + N + M
缺省操作

无。

注释

基于语句的 upload_update 脚本可用于直接更新列值,该列值由 UPLOAD 语句指定。

WHERE 子句必须包括正被同步的所有主键列。SET 子句必须包含正被同步的所有非主键列。

您可以在 SET 子句中使用表中存在的任意非主键列,MobiLink 将发送正确的列值数目。同样,在 WHERE 子句中,您也可以使用任意数目的主键,但它们必须都在此处指定,并且 MobiLink 能够发送正确的值。MobiLink 将发送这些列值和主键值,发送的顺序与表模式的 MobiLink 报告中列和主键出现的顺序相同。您可以使用 -vh 选项为此表模式确定列的顺序。

例如,在以下 upload_update 脚本中,问号的顺序正确:

UPDATE MyTable
  SET column_1 = ?, ..., column_M = ?
  WHERE pk_column_1 = ? AND ... AND pk_column_N = ?

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

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

要使用 upload_update 脚本检测冲突,请在 WHERE 子句中包括所有非主键列。

UPDATE table-name
SET col1 = {ml r.col1}, col2 = {ml r. col2 } ...
WHERE pk1 = {ml r.pk1} AND pk2 = {ml r.pk2} ...
   AND col1 = {ml o.col1} AND col2 ={ml o.col2} ...

在此语句中,col1 和 col2 是非主键列,而 pk1 和 pk2 是主键列。传递到第二组非主键列中的值是更新行的前映像。WHERE 子句将比较从远程数据库上载的旧值与统一数据库中的当前值。如果两个值不匹配,将忽略更新,保留统一数据库中已有的值。

另请参见
SQL 示例

此示例处理远程数据库中对 Customer 表进行的更新。该脚本将更新统一数据库中名为 Customer 的表中的值。

CALL ml_add_table_script(
  'ver1',
  'table1',
  'upload_update',
'UPDATE Customer 
   SET name = {ml r.name}, rep_id = {ml r.rep_id} 
      WHERE cust_id = {ml o.cust_id}')
Java 示例

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

CALL ml_add_java_table_script(
  'ver1',
  'table1',
  'upload_update',
  'ExamplePackage.ExampleClass.uploadUpdateTable' )

以下是 Java 方法 uploadUpdateTable 示例。它调用名为 genUU 的方法来动态生成一条 UPLOAD 语句。

public String uploadUpdateTable() {
  return( genUU(_curTable) ); 
}
.NET 示例

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

CALL ml_add_dnet_table_script(
  'ver1',
  'table1',
  'upload_update',
  'TestScripts.Test.UploadUpdate'
)

以下是 .NET 方法 UploadUpdate 示例。它调用名为 GenUU 的方法来动态生成一条 UPLOAD 语句。

public string UploadUpdate() {
  return ( genUU(_curTable) );
}