定义插入游标,MobiLink 同步服务器用该游标插入新行值,这些值在远程数据库中已经更新,但它们与当前统一数据库中的值相冲突。
对上载使用基于语句的事件已不支持使用此脚本。请使用基于语句的事件 upload_new_row_insert。将来的版本中很可能会删除对 new_row_cursor 事件的支持。 |
在下表中,[说明] 部分提供 SQL 数据类型。如果您使用 Java 或 .NET 编写脚本,则应该使用相应的数据类型。请参见 SQL-Java 数据类型和 SQL-.NET 数据类型。
| 项 | 参数 | 说明 |
|---|---|---|
| 1 | ml_username | VARCHAR(128) |
无。
在远程数据库上更新行时,MobiLink 客户端将保存原始值的副本。客户端将数据的旧值和新值一同发送到 MobiLink 同步服务器。也用于在强制冲突模式中输入 INSERT 操作。
在 MobiLink 同步服务器接收到更新的行时,它会使用 upload_cursor 将原始值与统一数据库中的当前值进行比较。如果旧的上载值与统一数据库中的当前值不匹配,则该行发生冲突。MobiLink 同步服务器将分别使用 old_row_cursor 和 new_row_cursor 将旧值和新值插入到统一数据库中,而不是更新该行。
MobiLink 同步服务器使用游标将新的上载值从冲突行插入到统一数据库。该脚本中包含用于定义此游标的 SELECT 语句。
使用临时表存储冲突行的新旧版本是常用的做法。您可以在前一个脚本中创建这些临时表。
您可以为远程数据库的每个表编写一个 new_row_cursor 脚本。
通常,选择列表中的列必须与客户端表中的列具有相同的顺序和类型。但 MobiLink 同步服务器允许额外添加一列。如果您额外添加了一列,MobiLink 同步服务器将自动向第一列中插入用户名,接着继续照常使用其余的列插入新的行值。
注意如果为同一个表定义了下列任一脚本,则该脚本将被忽略:upload_insert、upload_update、upload_delete、upload_fetch、upload_new_row_insert、upload_old_row_insert。 |
下面的 SELECT 语句定义了适用于 CustDB 示例应用程序的 new_row_cursor 脚本。
call ml_add_table_script(
'ver1',
'table1',
'new_row_cursor',
'SELECT order_id, cust_id, prod_id, emp_id,
disc, quant, notes, status
FROM ULNewOrder FOR update')ULOrder 表的主键是 order_id。
而下面的 SELECT 语句将用于相同的客户端表。这种情况允许额外添加一列。MobiLink 同步服务器将自动在第一列中存储用户名。
SELECT user_name, order_id, cust_id, prod_id,
emp_id, disc, quant, notes, status
FROM ULNewOrder FOR update此脚本必须返回有效的 SQL。
下面的存储过程调用在同步脚本版本 ver1 时将名为 newRowCursor 的 Java 方法注册为 new_row_cursor 事件的脚本。
call ml_add_java_table_script( 'ver1', 'table1', 'new_row_cursor', 'ExamplePackage.ExampleClass.newRowCursor' )
下面是示例 Java 方法 newRowCursor。它通过调用 Java 方法动态生成新行游标语句。
public String newRowCursor()
{ return( getRowCursor ( _curTable ) ); }SQL Anywhere Studio 9.0.2
版权所有 © 1989–2005 Sybase, Inc. 部分版权所有 © 2001–2005 iAnywhere Solutions, Inc. 保留所有权利。