您需要定义用于处理上载的存储过程和其它项目。需要分别为插入、删除和更新定义。
使用连接到远程数据库的 Interactive SQL 实例,创建一个触发器,此触发器使用下列 SQL 在插入每一行时为其设置 insert_time。
CREATE TRIGGER emp_ins AFTER INSERT ON employee REFERENCING NEW AS newrow FOR EACH ROW BEGIN UPDATE employee SET insert_time = CURRENT TIMESTAMP WHERE id = newrow.id END; |
此时间戳用于确定自上次同步以来是否插入了行。在 dbmlsync 应用从统一数据库下载的插入时将不触发此触发器,因为在此示例中稍后会将 FireTriggers 扩展选项设置为 off。通过下载插入的行所获得的 insert_time 值为 1900-01-01,这是创建 employee 表时定义的缺省值。此值应始终早于开始进度,以使这些行不会被视为新插入行,也不会在下一同步期间上载。
仍然在远程数据库中创建一个以结果集形式返回所有要上载的插入行的过程。
CREATE PROCEDURE employee_insert() RESULT( id unsigned integer, name varchar( 256 ), salary numeric( 9,2 ) ) BEGIN DECLARE start_time timestamp; SELECT value INTO start_time FROM #hook_dict WHERE name = 'start progress as timestamp'; // Upload as inserts all rows inserted after the start_time // that were not subsequently deleted SELECT id, name, salary FROM employee e WHERE insert_time > start_time AND NOT EXISTS( SELECT id FROM employee_delete ed WHERE ed.id = e.id ); END; |
![]() |
使用DocCommentXchange讨论此页。
|
版权 © 2013, SAP 股份公司或其关联公司. - SAP Sybase SQL Anywhere 16.0 |