Можно ли транзакционно отправить электронное письмо в Oracle? - PullRequest
2 голосов
/ 09 марта 2012

У меня есть несколько случаев, когда я делаю что-то вроде этого:

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

Есть ли какой-нибудь простой способ сделать это автоматически в Oracle 11g?

Единственный способ, которым я могу придумать, это сделать так, чтобы транзакция вставляла электронное письмо в таблицу и выполняла задание, которое периодически просыпается для проверки таблицы и отправки любых электронных писем в ней.

1 Ответ

2 голосов
/ 09 марта 2012

Вы можете с пакетом 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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...