2012-03-09 5 views
2

私はこのような何か症例数がありますトランザクションでOracleで電子メールを送信できますか?

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

が自動的にOracle 11gでこのトランザクションを実行する任意の簡単な方法はありますか?

これを行うには、トランザクションでテーブルに電子メールを挿入し、定期的にテーブルをチェックして電子メールを送信するジョブを持っていることが考えられます。

答えて

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; 
関連する問題