Plsql 突变表的问题,但我使用复合触发器,仍然是相同的问题

Plsql 突变表的问题,但我使用复合触发器,仍然是相同的问题,plsql,oracle11g,triggers,database-trigger,Plsql,Oracle11g,Triggers,Database Trigger,因此,我想更改数据库记录的信息,即电子邮件信息,因此我制作了一个复合触发器,将信息保存在数据库对象中,然后分配给:新元素 但是仍然有变异元素的问题,希望你能帮助我 create or replace TRIGGER MAIL_OUTBOX FOR UPDATE OR INSERT ON MAIL_OUTBOX COMPOUND TRIGGER TYPE mail IS RECORD (v_Mail_Id VARCHAR2(200), v_new_comment varchar2(200),

因此,我想更改数据库记录的信息,即电子邮件信息,因此我制作了一个复合触发器,将信息保存在数据库对象中,然后分配给:新元素
但是仍然有变异元素的问题,希望你能帮助我

create or replace TRIGGER MAIL_OUTBOX 
FOR UPDATE OR INSERT ON MAIL_OUTBOX 
COMPOUND TRIGGER
TYPE mail IS RECORD
(v_Mail_Id VARCHAR2(200),
v_new_comment varchar2(200),
v_new_email varchar2(200),
v_new_cc varchar2(200),
replaced_cc  varchar2(200),
replaced_receiver varchar2(200));
objetoMail mail;

BEFORE EACH ROW IS
BEGIN

objetoMail.v_Mail_Id := :NEW.MAIL_OUTBOX_ID;
objetoMail.v_new_comment := :OLD.COMMENTS;
objetoMail.v_new_cc := :OLD.CC;
objetoMail.replaced_receiver := :OLD.RECEIVER;

DBMS_OUTPUT.PUT_LINE(objetoMail.v_new_comment); 

IF objetoMail.v_new_comment LIKE '%ORA-29279%' THEN
SELECT regexp_substr(objetoMail.v_new_comment,'<([^>]+)>',1,1,NULL,1) into objetoMail.v_new_email                          
objetoMail.v_new_comment := 'Receptor desconocido ' || objetoMail.v_new_email;
:NEW.COMMENTS := objetoMail.v_new_comment;



hselect REGEXP_REPLACE(objetoMail.v_new_cc, objetoMail.v_new_email, 'xxx@xxxxxx.com' )
into objetoMail.replaced_cc
from  MAIL_OUTBOX; 
:NEW.CC := objetoMail.replaced_cc; 
select REGEXP_REPLACE(objetoMail.replaced_receiver, objetoMail.v_new_email, 'xxx@xxxxxx.com' )
into objetoMail.replaced_receiver
from  MAIL_OUTBOX; 
:NEW.RECEIVER := objetoMail.replaced_receiver; 

END IF;
END BEFORE EACH ROW;
AFTER STATEMENT IS 
v_Mail_Id VARCHAR2(60);
BEGIN
MAIL_PROCESS(NULL, objetoMail.v_Mail_Id );
END AFTER STATEMENT;
END;
创建或替换触发器邮件\u发件箱
用于在邮箱中更新或插入
复合触发器
键入邮件记录
(v_Mail_Id VARCHAR2(200),
v_new_评论varchar2(200),
v_new_email varchar2(200),
v_new_cc varchar2(200),
更换了2(200),
更换了_接收器varchar2(200));
邮件;
在每行之前
开始
objetoMail.v_Mail_Id:=:NEW.Mail_OUTBOX_Id;
objetoMail.v_new_comment:=:OLD.COMMENTS;
objetoMail.v_new_cc:=:OLD.cc;
objetoMail.replaced_receiver:=:OLD.receiver;
DBMS_OUTPUT.PUT_LINE(objetoMail.v_new_comment);
如果objetoMail.v_new_注释为“%ORA-29279%”,则
选择regexp_substr(objetoMail.v_new_comment,]+)>,1,1,NULL,1)到objetoMail.v_new_电子邮件中
objetoMail.v_new_comment:=“Receptor desconocido”| | objetoMail.v_new_email;
:NEW.COMMENTS:=objetoMail.v_NEW_comment;
hselect REGEXP_REPLACE(objetoMail.v_new_cc,objetoMail.v_new_email,'xxx@xxxxxx.com' )
替换为objetoMail.cc
从邮箱;
:NEW.CC:=objetoMail.replacemented\u CC;
选择REGEXP\u REPLACE(objetoMail.replaced\u receiver,objetoMail.v\u new\u email,'xxx@xxxxxx.com' )
进入objetoMail.U接收器
从邮箱;
:NEW.RECEIVER:=objetoMail.replacemented\u RECEIVER;
如果结束;
每行前结束;
声明之后是
v_Mail_Id VARCHAR2(60);
开始
邮件处理(空,objetoMail.v_邮件Id);
陈述后结束;
结束;

导致触发器突变的原因是邮件发件箱上的触发器中的select语句来自邮件发件箱。您需要从“发件箱”中选择吗?你正在设置一个变量,所以我想你可以从dual insteadwow中进行选择,伙计,这工作非常完美,真的很专业,你太棒了!