当前位置:Gxlcms > 数据库问题 > Oracle定時email通知

Oracle定時email通知

时间:2021-07-01 10:21:17 帮助过:10人阅读

EMAIL通知procedure email_notice_expired scan small_program_task表,將send_flag標記為N的寄出去。 written by milo 20170309 */ CREATE OR REPLACE PROCEDURE email_notice_expired AS v_email_recipient_string varchar(1000); v_email_html_content varchar2(32767); v_expired_minutes number; v_last_active_time date; v_station varchar(200); v_program varchar(200); v_timeout number; v_task_id varchar2(36); CURSOR c_task_table IS SELECT t1.station, t1.program_id, t1.last_active_time, t1.program_timeout, t1.expired_time, t2.mail_for_error, t1.job_no FROM small_program_task t1 left join TK_CUST_PROG_M t2 ON t1.station = t2.custom_no WHERE t1.send_flag = N; BEGIN OPEN c_task_table; LOOP FETCH c_task_table INTO v_station, v_program, v_last_active_time, v_timeout, v_expired_minutes, v_email_recipient_string, v_task_id; EXIT WHEN c_task_table%NOTFOUND; --null or empty string IF (v_email_recipient_string IS NULL OR v_email_recipient_string = ) THEN CONTINUE; END IF; --dbms_output.put_line(‘v_email_recipient_string: ‘ || v_email_recipient_string); v_email_html_content := <html> <head> <title></title> </head> <body> <p> Hi || v_station || ,</p> <p> This email is to notify you that the following program was not sent running status to server. Please check it ASAP.</p> <p> <Detail></p> <p> ------------------------------------------------------------------------------</p> <p> <b>Program Name | Last Active Time | Duration(Minutes)</b></p> <p> || v_program || | || to_char(v_last_active_time, dd-mm-yyyy hh24:mi) || | || v_expired_minutes || </p> <p> ------------------------------------------------------------------------------</p> </body> </html>; --call procedure to send email. send_mail(p_to => v_email_recipient_string, p_from => milo@***.com, p_subject => Program Status Notice( || v_program || ), p_text_msg => This is a test message., p_html_msg => v_email_html_content, p_smtp_host => spam.***.com, p_account => milo@***.com, p_password => ***); -- set send_flag ‘Y‘ that an email has been sent. update small_program_task set send_flag = Y where job_no = v_task_id; commit; END LOOP; CLOSE c_task_table; END;

 

可直接先測試以上的procedure是否可以成功寄信出去。

--測試procedure email_notice_expired
begin
  email_notice_expired;
end;

 

寫完了procedure,之後就是設置一個oracle排程去定時call這個procedure寄信就可以了。

/*call the stored procedure get_expired_program every 5 minutes.
written by milo on 20170309
*/
begin
  sys.dbms_scheduler.create_job(job_name            => PLOEC.EMAIL_NOTICE_EXPIRED_TASK,
                                job_type            => STORED_PROCEDURE,
                                job_action          => email_notice_expired,
                                start_date          => to_date(06-03-2017 00:00:00, dd-mm-yyyy hh24:mi:ss),
                                repeat_interval     => Freq=Minutely;Interval=10,
                                end_date            => to_date(07-03-2049 00:00:00, dd-mm-yyyy hh24:mi:ss),
                                job_class           => DBMS_JOB$,
                                enabled             => true,
                                auto_drop           => false,
                                comments            => 每10分鐘掃呼叫get_expired_program一次);
end;
/

 

可用以下SQL statement查看schedule的下次執行時間等。

--查看當前的schedule
SELECT * FROM dba_scheduler_jobs WHERE job_name = EMAIL_NOTICE_EXPIRED_TASK;

 

Oracle定時email通知

标签:for   tor   sub   stat   notice   creat   status   ace   pre   

人气教程排行