我有很多案例我会这样做:
... do some database action ...
COMMIT;
if ( commit succeeded without error ) {
send an email
}
在Oracle 11g中是否有任何直接的方式自动执行此事务?
关于我能想到的唯一方法就是让交易将电子邮件插入到表格中,然后让作业定期醒来检查表格并发送任何电子邮件。
答案 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;