Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Oracle DB:Sugestia dotycząca wyzwalacza poczty e-mail

Generalnie złym pomysłem byłoby próbowanie wysłania wiadomości e-mail w wyzwalaczu.

  1. Jeśli system nie może wysłać wiadomości e-mail (na przykład z powodu tymczasowego wyłączenia serwera SMTP), wyzwalacz nie powiedzie się, a instrukcja wyzwalająca nie powiedzie się i zostanie wycofana. Bardzo rzadko zdarza się, że naprawdę chciałbyś zatrzymać podstawową transakcję tylko dlatego, że nie byłeś w stanie wysłać wiadomości e-mail.
  2. Wysyłanie wiadomości e-mail nie ma charakteru transakcyjnego. Oznacza to, że będziesz wysyłać e-maile dotyczące zmian, które nigdy nie zostaną zatwierdzone. Będziesz też wysyłać e-maile wiele razy, ponieważ Oracle zdecyduje się na wycofanie i ponowne wykonanie całości lub części INSERT oświadczenie w celu utrzymania spójności zapisu.

Ogólnie rzecz biorąc, znacznie lepiej obsłużysz zadanie bazy danych, które okresowo wyszukuje wiersze, do których należy wysłać wiadomość e-mail, wysyła wiadomości e-mail, a następnie aktualizuje tabelę. Możesz użyć starszego DBMS_JOB pakiet lub nowszy i bardziej wyrafinowany DBMS_SCHEDULER pakiet. Coś w stylu

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;

który jest następnie zaplanowany do uruchamiania, powiedzmy co 5 minut (można również użyć DBMS_SCHEDULER pakiet)

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;

Możesz użyć pakietu UTL_MAIL zaimplementować send_email procedura. Prawdopodobnie wystarczy zadzwonić na UTL_MAIL.SEND z odpowiednimi parametrami (zakładając, że skonfigurowałeś swój SMTP_OUT_SERVER parametr i Twój użytkownik otrzymał odpowiedni dostęp do UTL_MAIL i do listy ACL, która umożliwia komunikację z tym serwerem 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 11g CREATE VIEW przy użyciu CONNECT BY i wielu tabel

  2. Kaskadowa aktualizacja Oracle

  3. SPRAWDŹ OGRANICZENIE ciągu, aby zawierał tylko cyfry. (Oracle SQL)

  4. dlaczego ten sql używał unii, wszystkie nie zwróciły żadnych danych?

  5. AWS Lambda nie może połączyć się z Oracle Instant Client