当我从我的表中删除一行名为“Categorie”的行时。我希望删除的naam记录在变量中。这样我可以将'Economie'(参见代码)更改为已删除的变量。所以我可以使用已删除的类别构建字符串。
示例 如果我的桌子计算:
我删除了想要将值运动存储在已删除变量中的行运动。
我现在的结果是:
邮件verstuurd naar Klaas@test.nl遇见了tekst Beste Klaas Vaak,uw abonnement是opgeheven voor Categorie Economie
我想要的结果是:
邮件verstuurd naar Klaas@test.nl遇见了tekst Beste Klaas Vaak,uw abonnement是opgeheven voor分类'删除值'
如何才能实现这一目标?
CREATE TABLE Categorie
(
naam VARCHAR2(64) PRIMARY KEY,
omschrijving VARCHAR2(2048)
);
CREATE or REPLACE TRIGGER Verwijdercategorie
before Delete
ON Categorie
DECLARE
categorieinvoer varchar2(30);
PROCEDURE gebruiker (categorienaam varchar2)
AS
voornamtemp varchar2(30);
achternaamtemp varchar2(30);
emailadresstemp varchar2(30);
bodyText varchar2(300);
categorie varchar(30):= categorienaam;
CURSOR emp_cursor IS
SELECT VOORNAAM, ACHTERNAAM,EMAILADRES from mailabonnee,categorieabonnement,categorie
where categorie.naam = categorieabonnement.categorienaam
and categorieabonnement.mailabonneeid = mailabonnee.id
and categorie.naam = categorie;
BEGIN
FOR employee_rec IN emp_cursor LOOP
voornamtemp:= employee_rec.VOORNAAM;
achternaamtemp:= employee_rec.ACHTERNAAM;
emailadresstemp:= employee_rec.EMAILADRES;
bodyText:= 'Beste ' || voornamtemp || ' ' || achternaamtemp || ' , uw abonnement is
opgeheven voor Categorie ' || categorienaam;
sendMailAbonnee(bodyText,emailadresstemp);
end loop;
END gebruiker;
begin
categorieinvoer:= 'Economie'; -- Value that need to be changed;
gebruiker(categorieinvoer);
end Verwijdercategorie;
答案 0 :(得分:1)
在你的触发器中,我认为你应该替换
categorieinvoer := 'Economie';
与
categorieinvoer := :OLD.NAAM;
试一试。
分享并享受。
答案 1 :(得分:0)
支持此操作的常用技巧是使用位标志(例如Deleted
)来指示当设置true
表示记录已被删除时(或相反,Active
标记当设置true
表示未删除记录时)。如果将审计字段与此结合使用,则可以跟踪谁更改了位标志的值。
当然,这会增加您编写的访问此表的查询的复杂性,因为他们必须添加一个过滤器:...WHERE DELETED = FALSE
或...WHERE ACTIVE = TRUE
。
另一种技术是在那些需要维护已删除值的表上使用所谓的“历史”表。这些历史记录表与常规表具有相同的结构,当从常规表中删除记录时,它将被插入到该表的历史记录表中。