Oracle
 sql >> база данни >  >> RDS >> Oracle

Oracle DB:Предложение за задействане на имейл

По принцип би било лоша идея да се опитате да изпратите имейл в тригер.

  1. Ако системата не може да изпрати имейла (например, защото SMTP сървърът временно не работи), тригерът ще се провали и операторът за задействане ще се провали и ще бъде върнат назад. Много рядко се случва наистина да искате да спрете основната транзакция просто защото не сте успели да изпратите имейл.
  2. Изпращането на имейл не е транзакция. Това означава, че ще изпращате имейли за промени, които никога не се ангажират. И ще изпращате имейли многократно, защото Oracle избира да върне назад и да изпълни отново целия или част от 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 за прилагане на send_email процедура. Вероятно просто трябва да се обадите на UTL_MAIL.SEND с подходящи параметри (ако приемем, че сте конфигурирали вашия SMTP_OUT_SERVER параметър и вашият потребител е получил подходящ достъп до UTL_MAIL пакет и към ACL, който ви позволява да комуникирате с този SMTP сървър).




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Вземете списък с всички функции и процедури в база данни на Oracle

  2. Oracle SQL Cross Tab Query

  3. Как да анализирам низ, разделен със запетая, в PL/SQL?

  4. Има ли разлика в производителността между concat срещу || в оракул

  5. ORACLE и TRIGGERS (вмъкнати, актуализирани, изтрити)