用于基于语句的上载的冲突解决脚本通常要求访问从远程数据库上载的行的旧值及新值。该事件可用于处理从远程数据库中上载的行的旧值。
| 项 | 参数 |
|---|---|
| ml_username | VARCHAR(128)。此参数是可选的。 |
| 1 | column 1 |
| 2 | column 2 |
| ... | ... |
无。
在 MobiLink 客户端向 MobiLink 同步服务器发送一个更新后的行时,发送的数据中不仅包含该行的新值(后映像),而且还将包含旧行值的副本(前映像)。如果前映像与统一数据库中的当前值不匹配,表示检测到了冲突。
此事件允许您将前映像的值保存到表中。此事件可以帮助您为基于语句的更新开发冲突解决过程。在对相应的统一数据库表执行更新之前,此事件的参数将保存远程数据库中的旧行值。此事件也可用于在基于语句的强制冲突模式中插入行。
此事件的脚本通常是一条插入语句,它将旧行插入到临时表中以供 resolve_conflict 脚本使用。
您可以为远程数据库的每个表编写一个 upload_old_row_insert 脚本。
对于 Java 和 .NET 应用程序,此脚本必须返回有效的 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( ?, ?, ?, ?, ?, 'O' )')
下面的存储过程调用在同步脚本版本 ver1 时将名为 uploadOldRowInsertTable 的 Java 方法注册为 upload_old_row_insert 表事件的脚本。
call ml_add_java_table_script( 'ver1', 'table1', 'upload_old_row_insert', 'ExamplePackage.ExampleClass.uploadNewRowInsertTable' )
下面是示例 Java 方法 uploadOldRowInsertTable。它动态生成 UPLOAD 语句。
public string uploadOldRowInsertTable()
{ old" + getCols(_curTable) +
"values" + getQM(_curTable)); }SQL Anywhere Studio 9.0.2
版权所有 © 1989–2005 Sybase, Inc. 部分版权所有 © 2001–2005 iAnywhere Solutions, Inc. 保留所有权利。