首页 > 解决方案 > 用过程替换触发器

问题描述

我有一个表 t1,其中包含字段 id、名称和日期。当我将日期更新为某个值时,我想将该条目移动到另一个表 t2(在 t1 中将其删除并将其插入到 t2 中)。我明确希望在 UPDATE 操作而不是 DELETE 操作上执行此操作。

我尝试使用 AFTER UPDATE ON t1 触发器来执行此操作,但是,我发现我无法在 t1 的触发器中从 t1 中删除条目。

这是否意味着我需要通过程序执行此操作?如果是,每次我将日期字段更新为 t1 中的某个值时,如何运行程序?

标签: sqloraclesql-updateproceduredatabase-trigger

解决方案


为表 t1 创建一个视图,然后在该视图上创建一个 INSTEAD OF TRIGGER:

create view v1 as select * from t1;

CREATE OR REPLACE TRIGGER IO_V1
    INSTEAD OF UPDATE ON V1
    FOR EACH ROW
BEGIN
    INSERT INTO t2 ...;
END;

当然,您可以将所有内容封装在一个过程中并运行该过程而不是直接执行 UPDATE 语句。


推荐阅读