sql >> Databáze >  >> RDS >> Oracle

Oracle DB:Návrh pro aktivaci e-mailu

Obecně by bylo špatné zkoušet poslat e-mail pomocí spouštěče.

  1. Pokud systém nemůže odeslat e-mail (například proto, že server SMTP je dočasně mimo provoz), spouštěč selže a spouštěcí příkaz selže a bude vrácen zpět. Je velmi vzácné, že byste skutečně chtěli zastavit podkladovou transakci jednoduše proto, že jste nebyli schopni odeslat e-mail.
  2. Odeslání e-mailu není transakční. To znamená, že budete posílat e-maily se změnami, které nikdy nebudou potvrzeny. A budete posílat e-maily vícekrát, protože Oracle se rozhodl vrátit zpět a znovu spustit celý nebo část INSERT prohlášení, aby byla zachována konzistence zápisu.

Obecně vám mnohem lépe poslouží databázová úloha, která pravidelně hledá řádky, které potřebují odeslat e-mail, odešle e-maily a poté aktualizuje tabulku. Můžete použít buď starší DBMS_JOB balíček nebo novější a sofistikovanější DBMS_SCHEDULER balík. Něco ve smyslu

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;

který je pak naplánován na spuštění, řekněme, každých 5 minut (můžete také použít DBMS_SCHEDULER balíček)

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;

Můžete použít balíček UTL_MAIL implementovat send_email postup. Pravděpodobně stačí zavolat UTL_MAIL.SEND s příslušnými parametry (za předpokladu, že jste nakonfigurovali SMTP_OUT_SERVER a vašemu uživateli byl udělen odpovídající přístup k UTL_MAIL balíčku a do ACL, který vám umožňuje komunikovat s tímto SMTP serverem).




  1. Mám tento kód, který funguje dobře, ale chci změnit kód na jinou strukturu

  2. Získejte uživatelská jména přihlášená každý den z databáze

  3. Získejte záznamy s maximální hodnotou pro každou skupinu seskupených výsledků SQL

  4. Jak vložit do tabulky název jako alias pomocí pg-promise insert helper?