如何在变量中存储已删除的值?

时间:2014-01-04 00:33:28

标签: plsql

当我从我的表中删除一行名为“Categorie”的行时。我希望删除的naam记录在变量中。这样我可以将'Economie'(参见代码)更改为已删除的变量。所以我可以使用已删除的类别构建字符串。

示例 如果我的桌子计算:

  • 运动omschrijving
  • Economie omschrijving
  • Binnenland omschrijving
  • Buitenland omschrijving

我删除了想要将值运动存储在已删除变量中的行运动。

我现在的结果是:

邮件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;

2 个答案:

答案 0 :(得分:1)

在你的触发器中,我认为你应该替换

categorieinvoer := 'Economie';

categorieinvoer := :OLD.NAAM;

试一试。

分享并享受。

答案 1 :(得分:0)

支持此操作的常用技巧是使用位标志(例如Deleted)来指示当设置true表示记录已被删除时(或相反,Active标记当设置true表示未删除记录时)。如果将审计字段与此结合使用,则可以跟踪谁更改了位标志的值。

当然,这会增加您编写的访问此表的查询的复杂性,因为他们必须添加一个过滤器:...WHERE DELETED = FALSE...WHERE ACTIVE = TRUE

另一种技术是在那些需要维护已删除值的表上使用所谓的“历史”表。这些历史记录表与常规表具有相同的结构,当从常规表中删除记录时,它将被插入到该表的历史记录表中。