您无法在驻留于当前数据库之外的表或视图上创建触发器。但是,您可以在本地表上定义触发器,该表的触发操作操纵了本地服务器实例的另一个数据库中的表,或另一个服务器实例的数据库中的表。
CREATE TRIGGER upd_nt UPDATE ON newtab REFERENCING NEW AS post FOR EACH ROW(UPDATE stores_demo@dbserver2:items SET quantity = post.qty WHERE stock_num = post.stock AND manu_code = post.mc);
定义在远程服务器实例的数据库上的触发器的跨服务器触发操作可以是激活本地数据库中的一个或多个触发器的事件,本地触发器的触发操作不能是跨服务器操作。如果来自远程数据库服务器的 SELECT 、DELETE 、INSERT 、MERGE 或 UPDATE 语句是激活本地触发器(其操作指定了远程数据库实例的数据库的表)的事件,则触发操作失败。
-- Trigger action from dbserver1 to dbserver3: CREATE TRIGGER upd_nt UPDATE ON newtab REFERENCING NEW AS post FOR EACH ROW(UPDATE stores_demo@dbserver3:items SET quantity = post.qty WHERE stock_num = post.stock AND manu_code = post.mc); -- Triggering statement from dbserver2: UPDATE stores_demo@dbserver1:newtab SET qty = qty * 2 WHERE s_num = 5 AND mc = 'ANZ';以上的 UPDATE 语句在运行时不会返回错误,因为跨服务器的触发事件不会触发另一个跨服务器操作。