Oracle11g Oracle DB:电子邮件触发器的建议
是否有人可以提供一个链接或Oracle DB触发器的示例,该触发器在表中的特定列更新并更新同一表中的不同列时发送电子邮件 例如: 一个表有多个问题,有两列“Issue Added”和“Email Sent”,默认为“0”Oracle11g Oracle DB:电子邮件触发器的建议,oracle11g,Oracle11g,是否有人可以提供一个链接或Oracle DB触发器的示例,该触发器在表中的特定列更新并更新同一表中的不同列时发送电子邮件 例如: 一个表有多个问题,有两列“Issue Added”和“Email Sent”,默认为“0” Issue Added Email Sent 0 0 “已添加问题”列更新为“1”时 Issue Added Email Sent 1 0 触发器发送电子邮件并更新“已发送电子邮件”列 Issu
Issue Added Email Sent
0 0
“已添加问题”列更新为“1”时
Issue Added Email Sent
1 0
触发器发送电子邮件并更新“已发送电子邮件”列
Issue Added Email Sent
1 1
通常情况下,尝试在触发器中发送电子邮件是个坏主意
INSERT
语句的全部或部分,以保持写入一致性DBMS\u作业
包,也可以使用较新且更复杂的DBMS\u调度程序
包。类似于
CREATE OR REPLACE PROCEDURE process_issues
AS
BEGIN
FOR i IN (SELECT *
FROM your_table_name
WHERE issue_added = 1
AND email_sent = 0)
LOOP
send_email( i.issue_id );
UPDATE your_table_name
SET email_sent = 1
WHERE issue_id = i.issue_id;
END LOOP;
END;
然后计划每5分钟运行一次(您也可以使用DBMS\u调度程序
包)
您可以使用来执行发送电子邮件
过程。您可能只需要使用适当的参数调用UTL\u MAIL.SEND
(假设您已配置了SMTP\u OUT\u服务器
参数,并且您的用户已被授予对UTL\u MAIL
包和允许您与该SMTP服务器通信的ACL的适当访问权限)
DECLARE
l_jobno PLS_INTEGER:
BEGIN
dbms_job.submit( l_jobno,
'BEGIN process_issues; END;',
sysdate + interval '5' minute,
'sysdate + interval ''5'' minute' );
commit;
END;