sql - 触发动态了解事件类型
问题描述
INSERT
对于在or之前发生的触发器,我有几乎相同的代码UPDATE
,而不是创建 2 个触发器,有没有办法知道触发器内部动态发生的事件类型?
例子:
CREATE OR REPLACE FUNCTION UpsertClientLog() RETURNS TRIGGER AS $$
DECLARE action_type VARCHAR(255);
BEGIN
IF (event == 'INSERT') THEN
action_type = 'Create'
ELSE
action_type = 'Update'
END IF;
-- Same code from here on out ..
END;
$$ LANGUAGE plpgsql;
CREATE TRIGGER UPSERT_CLIENT_LOG BEFORE INSERT OR UPDATE ON client
FOR EACH ROW EXECUTE PROCEDURE UpsertClientLog();
解决方案
您可以使用特殊变量TO_OP
:
TG_OP
数据类型文本;一串
INSERT
,UPDATE
,DELETE
, 或TRUNCATE
告诉触发触发器的操作。
推荐阅读
- sql - 如何在 SQL Server 数据库中动态导航表外键关系的层次结构以获得最终父条目?
- javascript - 脚本 onload - 调用内部函数
- sql-server - 使用返回多行的变量从另一个表的信息中更新列
- audio - FFMPEG 检测静音命令正确运行,但没有给出静音持续时间
- python - Tkinter 长列表显示在网格中
- javascript - 是否可以通过 JS 字符串在 HTML 中创建断线?
- javascript - 当你需要在Angular8中通过导航将数据传递给另一个组件时,最安全和最有效的方法是什么?
- python - 如何更改 Matplotlib 3d 旋转(mplot3d)的鼠标交互方式?
- javascript - 谷歌应用脚本关于如何从从其电子表格的 html 表单接收到的数据创建 pdf 并通过电子邮件发送 pdf 文件
- okta - 如何登录到使用 OKTA 进行身份验证的任意网页?