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

为检测行级冲突的目的从统一数据库的已同步表中读取行。

参数

SQL 脚本的参数名称

顺序

r.primary-key-1

1

r.primary-key-2

2

...

...

r.primary-key-N

N
缺省操作

无。

注释

基于语句的 upload_fetch 脚本用于从同步表中读取行以便检测冲突。它随 upload_update 事件使用。

结果集的列数必须与从远程数据库为此表上载的列数相匹配。如果返回值与上载的行中的前映像不匹配,则发生冲突。

不要在 upload_fetch 脚本中使用 READPAST 表提示。如果该脚本使用 READPAST 跳过锁定行,则同步逻辑会认为该行已被删除。根据您所定义的脚本,这会造成忽略上载的更新或触发冲突解决。忽略更新可能是不可接受的行为并可能是有害的。触发冲突解决可能不是一个问题,它取决于您已实现的解决逻辑。

您只能为远程数据库中的每个表编写一个 upload_fetch 脚本或一个 upload_fetch_column_conflict 脚本。

此脚本在未定义以下脚本时可以被忽略:upload_new_row_insert、upload_old_row_insert 和 resolve_conflict。

另请参见
SQL 示例

以下 SQL 脚本来自 Contact 示例,并可在 samples-dir\MobiLink\Contact\build_consol.sql 中找到。它用于识别在上载远程数据库中 Product 表的更新行时发生的冲突。此脚本从名称也为 Product 的表中选择行,这两个表的名称也可以不匹配,匹配与否取决于统一数据库与远程数据库的模式。

CALL ml_add_table_script(
  'ver1',
  'Product',
  'upload_fetch',
  'SELECT id, name, size, quantity, unit_price
   FROM Product 
   WHERE id={ml r.id}' )
Java 示例

此脚本必须返回有效的 SQL。

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

CALL ml_add_java_table_script(
  'ver1',
  'Product',
  'upload_fetch',
  'ExamplePackage.ExampleClass.uploadFetchTable' )

以下是 Java 方法 uploadFetchTable 示例。它调用 genUF 来动态生成一条 UPLOAD 语句。

public String uploadFetchTable() {
  return( genUF(_curTable) ); 
}
.NET 示例

此脚本必须返回有效的 SQL。

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

CALL ml_add_dnet_table_script(
  'ver1',
  'Product',
  'upload_fetch',
  'TestScripts.Test.UploadFetchTable' )

以下是 .NET 方法 UploadFetchTable 示例。它调用 GenUF 来动态生成一条 UPLOAD 语句。

public string UploadFetchTable() {
  return( GenUF(_curTable) ); 
}