我正在尝试创建一个触发器,一旦员工(表员工)被删除,将该员工作为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表上没有任何更新。
答案 0 :(得分:0)
为什么你不这样做?
UPDATE "Customer"
SET "SupportRepId" = old."ReportsTo"
WHERE "SupportRepId" IS NULL;
我不确定解决问题的逻辑是否正确,但这似乎是一个更简单的解决方案 - 并且不需要查询定义触发器的表。