sql >> Database teknologi >  >> RDS >> Oracle

Oracle DB:Forslag til Email Trigger

Det ville generelt være en dårlig idé at prøve at sende en e-mail i en trigger.

  1. Hvis systemet ikke er i stand til at sende e-mailen (f.eks. fordi SMTP-serveren midlertidigt er nede), vil triggeren mislykkes, og den udløsende erklæring vil mislykkes og blive rullet tilbage. Det er meget sjældent, at du virkelig ønsker at stoppe den underliggende transaktion, blot fordi du ikke var i stand til at sende en e-mail.
  2. At sende en e-mail er ikke-transaktionel. Det betyder, at du sender e-mails for ændringer, der aldrig bliver forpligtet. Og du vil sende e-mails flere gange, fordi Oracle vælger at rulle tilbage og genudføre hele eller dele af en INSERT erklæring for at bevare skrivekonsistens.

Du vil generelt være meget bedre tjent med et databasejob, der med jævne mellemrum leder efter rækker, der skal have sendt en e-mail, sender e-mails og derefter opdaterer tabellen. Du kan bruge enten den ældre DBMS_JOB pakke eller den nyere og mere sofistikerede DBMS_SCHEDULER pakke. Noget i stil med

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;

som derefter er planlagt til at køre, f.eks. hvert 5. minut (du kan også bruge DBMS_SCHEDULER pakke)

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;

Du kan bruge UTL_MAIL-pakken for at implementere send_email procedure. Du skal sandsynligvis bare ringe til UTL_MAIL.SEND med passende parametre (forudsat at du har konfigureret din SMTP_OUT_SERVER parameter, og din bruger har fået passende adgang til UTL_MAIL pakke og til en ACL, der giver dig mulighed for at kommunikere med den pågældende SMTP-server).




  1. phpMyAdmin - kan ikke oprette forbindelse - ugyldige indstillinger - lige siden jeg tilføjede en root-adgangskode - låst ude

  2. mysql import/eksport

  3. Sammenkæd felter af rækker med det samme ID i MySQL

  4. Mysql:Byt data til forskellige rækker