CREATE OR REPLACE FUNCTION fn_process_delete() RETURNS TRIGGER AS $$
BEGIN
UPDATE workflow SET deleted_process_name = OLD.process_name
WHERE process_id = OLD.process_id;
RETURN NULL;
END;
$$ LANGUAGE plpgsql;
DROP TRIGGER IF EXISTS process_delete ON processes;
CREATE TRIGGER process_delete
AFTER DELETE ON processes
FOR EACH ROW
EXECUTE PROCEDURE fn_process_delete();
我的问题有两个:
RETURN NULL;
跳过触发事件的执行。
行级触发器触发要继续删除该行,请将其替换为:可以返回 null 来表示 触发管理器跳过该行的其余操作(即 后续触发器不会被触发,并且
BEFORE
INSERT
/UPDATE
/DELETE
该行不会发生)。
RETURN OLD;
在我的粗体强调。
DELETE
上有 before-trigger的情况下,返回值没有 直接效果,但它必须是nonnull 才能允许触发操作 继续。请注意,在NEW
触发器中,DELETE
为空,因此返回该值 通常是不明智的。DELETE
触发器中的常用习惯用法是 返回OLD
。
问题1
AFTER DELETE
那样工作。显然,表
process_id
中必须存在具有匹配
workflow
的行。