sql - 用过程替换触发器
问题描述
我有一个表 t1,其中包含字段 id、名称和日期。当我将日期更新为某个值时,我想将该条目移动到另一个表 t2(在 t1 中将其删除并将其插入到 t2 中)。我明确希望在 UPDATE 操作而不是 DELETE 操作上执行此操作。
我尝试使用 AFTER UPDATE ON t1 触发器来执行此操作,但是,我发现我无法在 t1 的触发器中从 t1 中删除条目。
这是否意味着我需要通过程序执行此操作?如果是,每次我将日期字段更新为 t1 中的某个值时,如何运行程序?
解决方案
为表 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 语句。
推荐阅读
- r - 如何将数据标签添加到 R 上的雷达图?
- react-native - React-Native 上的共享工作表图标
- r - igraph 未知索引
- javascript - 当轮播位于过渡元素中时,Slick 有时会显示所有元素彼此重叠
- r - 导致此错误的原因:“无法检索 XML 的包源”
- python - 我怎样才能让它打印用户输入的最长的名称/字符串
- python - 使多个变量等于列表中的多个值
- python - 如何在 tkinter 中更改帧,使其保持活动状态几秒钟
- c# - 如何确定 Azure Blob 是否不同于当前文件(C#/.Net Core)?
- html - 为什么 flex-basis 不适用于 flex-direction: row?