首页 > 代码库 > Oracle定時email通知
Oracle定時email通知
small_program_task 這張表的資料是待發送的email通知,再次之前已經有一個job會定時掃描固定時間內未接收到小程式回報狀態將其寫入到該表,send_flag為N,表示為寄過通知。
email_notice_expired這個procedure負責寄出通信,簡單的HTML也直接寫在procedure裡面。
/*EMAIL通知procedure email_notice_expiredscan 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_expiredbegin 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的下次執行時間等。
--查看當前的scheduleSELECT * FROM dba_scheduler_jobs WHERE job_name = ‘EMAIL_NOTICE_EXPIRED_TASK‘;
Oracle定時email通知
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。