Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Oracle DB:Saran untuk Pemicu Email

Biasanya merupakan ide yang buruk untuk mencoba mengirim email dalam pemicu.

  1. Jika sistem tidak dapat mengirim email (misalnya, karena server SMTP sedang down sementara), pemicu akan gagal dan pernyataan pemicu akan gagal dan dibatalkan. Sangat jarang Anda benar-benar ingin menghentikan transaksi pokok hanya karena Anda tidak dapat mengirim email.
  2. Mengirim email tidak bersifat transaksional. Itu berarti Anda akan mengirim email untuk perubahan yang tidak pernah dilakukan. Dan Anda akan mengirim email beberapa kali karena Oracle memilih untuk mengembalikan dan menjalankan kembali semua atau sebagian dari INSERT pernyataan untuk menjaga konsistensi penulisan.

Anda biasanya akan jauh lebih baik dilayani dengan pekerjaan database yang secara berkala mencari baris yang perlu memiliki email yang dikirim, mengirim email, dan kemudian memperbarui tabel. Anda dapat menggunakan DBMS_JOB yang lebih lama paket atau DBMS_SCHEDULER yang lebih baru dan lebih canggih kemasan. Sesuatu di sepanjang baris

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;

yang kemudian dijadwalkan untuk dijalankan, katakanlah, setiap 5 menit (Anda juga dapat menggunakan DBMS_SCHEDULER paket)

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;

Anda dapat menggunakan paket UTL_MAIL untuk mengimplementasikan send_email prosedur. Anda mungkin hanya perlu menelepon UTL_MAIL.SEND dengan parameter yang sesuai (dengan asumsi Anda telah mengonfigurasi SMTP_OUT_SERVER parameter dan pengguna Anda telah diberikan akses yang sesuai ke UTL_MAIL paket dan ke ACL yang memungkinkan Anda berkomunikasi dengan server SMTP itu).




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Memasukkan CLOB menggunakan cx_Oracle

  2. Kesalahan pemicu SQL - pemicu tidak valid

  3. Oracle - Masalah membuat pemicu yang memperbarui tabel lain

  4. Pengambilan sampel dari Oracle, Perlu jumlah hasil yang tepat (Sample Clause)

  5. INST_TOP (Oracle R12 INSTANCE_HOME ) diterjemahkan