如果表中的特定列更新并更新同一表中的其他列,是否可以提供链接或Oracle数据库触发器示例(如果表中的特定列更新并发送电子邮件)?
实施例: 一个表有多个问题,有两列“Issue Added”和“Email Sent”,默认为“0”
Issue Added Email Sent
0 0
当“已添加问题”列更新为“1”
时Issue Added Email Sent
1 0
触发器会发送电子邮件并更新“已发送电子邮件”列
Issue Added Email Sent
1 1
答案 0 :(得分:1)
尝试在触发器中发送电子邮件通常是一个坏主意。
INSERT
语句,以保持写入一致性。通常,您可以更好地使用数据库作业来定期查找需要发送电子邮件的行,发送电子邮件,然后更新表。您可以使用较早的DBMS_JOB
包或较新且更复杂的DBMS_SCHEDULER
包。
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_SCHEDULER
包)
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;
您可以使用UTL_MAIL package来实施send_email
程序。您可能只需要使用适当的参数调用UTL_MAIL.SEND
(假设您已配置了SMTP_OUT_SERVER
参数,并且您的用户已被授予对UTL_MAIL
包的适当访问权限以及允许您访问的ACL与该SMTP服务器通信。)