用于基于语句的上载的冲突解决脚本通常要求访问从远程数据库上载的行的旧值及新值。此数据脚本事件可用于处理从远程数据库中上载的行的新值和更新值。
在下表中,说明部分提供 SQL 数据类型。如果您使用 Java 或 .NET 编写脚本,则应该使用相应的数据类型。请参见SQL-Java 数据类型和SQL-.NET 数据类型。
在 SQL 脚本中,可以按名称或使用问号指定事件参数。不建议使用问号,建议您使用命名参数。不能在一个脚本中混合使用名称和问号。如果使用问号,则参数必须按照如下所示的顺序并且仅当没有指定任何后继参数时才是可选的(例如,如果您想使用参数 2,则必须使用参数 1)。如果使用命名参数,则可以按照任何顺序指定任意参数子集。
SQL 脚本的参数名称 | 说明 | 顺序(不建议用于 SQL) |
---|---|---|
s.remote_id |
VARCHAR(128)。MobiLink 远程 ID。只有在使用命名参数时才能引用远程 ID。 |
不适用 |
s.username |
VARCHAR(128)。MobiLink 用户名。此参数为可选参数。 |
可选(如果引用则为 1) |
r. pk-column-1 |
必需。新(后映像)行中的第一个主键列值,由列名或列编号引用。 |
1(如果引用用户名则为 2) |
... | ... | ... |
r. pk-column-N |
必需。新(后映像)行中的最后一个主键列值,由列名或列编号引用。 |
N(如果引用用户名则为 N + 1) |
r. column-1 |
必需。新(后映像)行中的第一个非主键列值,由列名或列编号引用。 |
N + 1(如果引用用户名则为 N+2) |
... | ... | ... |
r. column-M |
必需。新(后映像)行中的最后一个非主键列值,由列名或列编号引用。 |
N + M(如果引用用户名则为 N+M+1) |
无。
在 MobiLink 客户端向 MobiLink 服务器发送一个更新后的行时,发送的数据中不仅包含该行的新值(后映像),而且还将包含旧行值的副本(前映像)。前映像与统一数据库中的当前值不匹配时,则会检测到冲突。
MobiLink 检测到冲突后,此事件允许您将后映像的值保存到表中。此事件可以帮助您为更新开发冲突解决过程。在对相应的统一数据库表执行更新之前,此事件的参数将保存远程数据库中的新行值。此事件也可用于在强制冲突模式中插入行(不建议使用强制冲突模式)。
当通过 upload_update 脚本一次性执行所有冲突检测时,通常速度会快很多。请参见upload_update 表事件。
此事件的脚本通常是一条插入语句,它将新行插入到临时表中以供 resolve_conflict 脚本使用。
您可以为远程数据库的每个表编写一个 upload_new_row_insert 脚本。
该脚本必须以 SQL 实现。对于行的 Java 或 .NET 处理,请参见直接行处理。
此示例处理远程数据库中对 product 表进行的更新。该脚本将新行值插入到名为 product_conflict 的全局临时表中。表的最后一列将该行标识为新行。
CALL ml_add_table_script( 'ver1', 'table1', 'upload_new_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}, ''New'' )' ) |
![]() |
使用DocCommentXchange 讨论此页。
|
版权 © 2010, iAnywhere Solutions, Inc. - SQL Anywhere 12.0.0 |