我正在开发一种产品,当有人等待送达超过15分钟时,我必须向相关人员发送SMS。
为此,我编写了一个监视表并CUST_ID, CUST_CATEGORY, DURATION
在Duration
超过15时将其存储在单独的表中的过程。该表的表结构为:
Some_Table
CUST_ID CUST_CATEGORY DURATION SMS_STATUS
我写了一个触发器为:
扳机
create or replace trigger kiosk_sms_trg
after insert on Some_Table
referencing new as new old as old
for each row
BEGIN
SMS_Proc@My_Server; --Procudure that generates SMS
update Some_Table set status = 'Y' where id = (select max(id) id from Some_Table where status = 'N'); --Update Table that SMS has been sent
select 'Y' into :new.status from dual;
END;
但这会导致突变问题。我该如何解决?任何帮助将不胜感激。我正在使用Oracle 11G。
我不认为SOME_TABLE上允许更新,因为它目前正在变异。
为什么不将它放在刚触发触发器的INSERT语句之后呢?
INSERT INTO SOME_TABLE ...
update Some_Table set status = 'Y' where id = (select max(id) id from Some_Table where status = 'N'); --Update Table that SMS has been sent
考虑到您没有在该UPDATE中执行任何特定于行的操作,我认为这将是正确的方法。
正如我在评论中提到的,AFTER INSERT
触发器中的最后一条语句是否有特殊用途?它在BEFORE INSERT
触发器中确实具有意义。
select 'Y' into :new.status from dual;
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句