是否可以在Oracle中以事务方式发送电子邮件?

时间:2012-03-09 00:39:56

标签: email transactions oracle11g

我有很多案例我会这样做:

... do some database action ...
COMMIT;
if ( commit succeeded without error ) {
    send an email
}

在Oracle 11g中是否有任何直接的方式自动执行此事务?

关于我能想到的唯一方法就是让交易将电子邮件插入到表格中,然后让作业定期醒来检查表格并发送任何电子邮件。

1 个答案:

答案 0 :(得分:2)

您可以使用DBMS_JOB包。使用DBMS_JOB提交作业时,作业将在触发事务提交之前运行。您的作业实际上在提交发生后的几秒钟内异步发送电子邮件。

CREATE PROCEDURE do_something
AS
  l_jobno NUMBER;
BEGIN
  <<do something>>
  dbms_job.submit( l_jobno,
                   'BEGIN send_email; END;',
                   sysdate + interval '5' second );
  commit;
END;

CREATE PROCEDURE send_email 
AS
BEGIN
  <<send email>>
END;