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

Plsql 如何在变量中存储已删除的值?,plsql,Plsql,当我从表中删除名为“Categorie”的行时。我希望在变量中删除naam记录。这样我就可以将“Economie”(参见代码)更改为已删除的变量。因此,我可以使用已删除的类别构建字符串 范例 如果我的桌子计数: 运动鞋 经济舱 宾内兰奥姆施里金酒店 建筑用地 我删除了行sport,我想将值sport存储在删除的变量中 我现在得到的结果是: 邮件:verstuurd naarKlaas@test.nl如果你是克劳斯·瓦克,那么你的选择是属于经济范畴的 我想要的结果是: 邮件:verstuurd

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

范例 如果我的桌子计数:

  • 运动鞋
  • 经济舱
  • 宾内兰奥姆施里金酒店
  • 建筑用地
我删除了行sport,我想将值sport存储在删除的变量中

我现在得到的结果是:

邮件:verstuurd naarKlaas@test.nl如果你是克劳斯·瓦克,那么你的选择是属于经济范畴的

我想要的结果是:

邮件:verstuurd naarKlaas@test.nl根据Klas Vaak的说法,我们的关联是“删除值”

我怎样才能做到这一点

 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;

支持这一点的常用技术是使用位标志,例如
Deleted
,以指示当设置
true
时记录已被删除(或者相反,当设置
true
时,
活动
标志指示记录未被删除)。如果同时使用审核字段,则可以跟踪更改位标志值的人

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


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

在触发器的主体中,我认为您应该替换

categorieinvoer := 'Economie';

试试看


分享和享受。

当我在sql developer Bob Jarvis中尝试您的代码时,我得到了以下绑定信息。我做错了什么![BINDS][1][1]:NVM我已经找到了我的错误,因为我试图更改光标中的一个选项卡,这就是我收到错误消息的原因。
categorieinvoer := :OLD.NAAM;