Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Oracle DB:Đề xuất cho Trình kích hoạt Email

Nói chung sẽ là một ý tưởng tồi nếu bạn cố gắng gửi một email trong một trình kích hoạt.

  1. Nếu hệ thống không thể gửi email (ví dụ:do máy chủ SMTP tạm thời ngừng hoạt động), trình kích hoạt sẽ không thành công và câu lệnh kích hoạt sẽ không thành công và được khôi phục lại. Rất hiếm khi bạn thực sự muốn dừng giao dịch cơ bản chỉ vì bạn không thể gửi email.
  2. Gửi email không mang tính chất giao dịch. Điều đó có nghĩa là bạn sẽ gửi email cho những thay đổi không bao giờ được cam kết. Và bạn sẽ gửi email nhiều lần vì Oracle chọn khôi phục và thực thi lại tất cả hoặc một phần của INSERT để duy trì tính nhất quán của văn bản.

Nói chung, bạn sẽ được phục vụ tốt hơn nhiều với công việc cơ sở dữ liệu định kỳ tìm kiếm các hàng cần gửi email, gửi email và sau đó cập nhật bảng. Bạn có thể sử dụng DBMS_JOB cũ hơn gói hoặc DBMS_SCHEDULER mới hơn và phức tạp hơn bưu kiện. Một cái gì đó dọc theo dòng của

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;

sau đó được lên lịch chạy, chẳng hạn, cứ sau 5 phút (bạn cũng có thể sử dụng DBMS_SCHEDULER gói)

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;

Bạn có thể sử dụng gói UTL_MAIL để triển khai send_email thủ tục. Bạn có thể chỉ cần gọi UTL_MAIL.SEND với các tham số thích hợp (giả sử bạn đã định cấu hình SMTP_OUT_SERVER của mình và người dùng của bạn đã được cấp quyền truy cập thích hợp vào UTL_MAIL và với một ACL cho phép bạn giao tiếp với máy chủ 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. Cách thực hiện giao dịch riêng lẻ trong Oracle PLSQL

  2. PLS-00103:Gặp phải biểu tượng CREATE

  3. Khoảng trắng không được phép sau tiền tố tham số ':'

  4. tính năng nào để sử dụng trong phiên bản tiêu chuẩn oracle giống như tính năng phân vùng trong phiên bản doanh nghiệp oracle

  5. IF EXISTS điều kiện không hoạt động với PLSQL