不删除,触发功能错误?

时间:2018-04-14 23:49:31

标签: postgresql triggers sql-delete procedure

我正在尝试创建一个触发器,一旦员工(表员工)被删除,将该员工作为SupportRep的客户(表客户)被分配给前员工的“老板”(称为ReportsTo)。我创建了这个触发器功能,当我尝试删除一个员工时,查询是成功的,但并没有真正删除任何人。

CREATE OR REPLACE FUNCTION REEMPLAZAR() RETURNS TRIGGER AS $CAMBIO$

BEGIN
    UPDATE "Customer"
    SET "SupportRepId" = old."ReportsTo"
    WHERE "SupportRepId" IS NULL;
    RETURN NEW;
END;
$CAMBIO$ 
LANGUAGE plpgsql;

这将是触发器:

CREATE TRIGGER ac_supp BEFORE DELETE 
    ON "Employee" FOR EACH ROW 
    EXECUTE PROCEDURE REEMPLAZAR();

当我跑步时:

 DELETE FROM public."Employee"
 WHERE "EmployeeId" = 9;

它应该成功执行但是当我检查Employee表时,我试图删除的员工仍然存在,并且Customers表上没有任何更新。

1 个答案:

答案 0 :(得分:0)

为什么你不这样做?

UPDATE "Customer"
    SET "SupportRepId" = old."ReportsTo"
    WHERE "SupportRepId" IS NULL;

我不确定解决问题的逻辑是否正确,但这似乎是一个更简单的解决方案 - 并且不需要查询定义触发器的表。