Oracle定時email通知

small_program_task 這張表的資料是待發送的email通知,再次之前已經有一個job會定時掃描固定時間內未接收到小程式回報狀態將其寫入到該表,send_flag為N,表示為寄過通知。email_notice_expired這個procedure負責寄出通信,簡單的HTML也直接寫在procedure裡面。
/*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      => ‘[email protected]***.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   => ‘[email protected]***.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‘;
时间: 2024-10-25 03:33:53

Oracle定時email通知的相关文章

解決Spring的定時器如何獲取項目的部署路徑

最近在寫項目的時候遇到在Spring的定時器下需要用到項目路徑的,但是在定時器中,沒法獲取request或者session不能直接調用他的方法直接獲得,那麼怎麼解決這樣的問題呢?其實還是有辦法的,正所謂條條道路通羅馬,spring這麼強大怎麼可能被這點小事給整過去. 我舉個例子吧,加入我們需要些這麼個定時器,他的需求如下:每天進行一次項目生成的一次性的文件進行刪除 那麼定時器代碼如下: package com.smartsoft.quartz; import java.io.File; impo

用PHP即時捕捉PHP原始碼中的錯誤并發送email通知

開發PHP的朋友都知道,其實最擔心的就是程序中出現一些異常或錯誤,這些狀況如果輸出到用戶的螢幕會把用戶給嚇壞,甚至為此丟了工作,如果不輸出到螢幕就得想辦法記錄到日誌中,但是似乎不是每個人都有查看錯誤日誌的習慣,爲了解決這個尷尬的問題,所以我寫了這段代碼,其用意就是當我們寫的php程式出錯的時候把錯誤內容捕捉出來然後發到我們的email內.先看效果: Define('SYS_DEBUG',false); IF(SYS_DEBUG) { ini_set('display_errors','on');

帝国留言板管理员回复发送EMAIL通知客户

说明:修改1:e/admin/tool/ReGook.php   /*回复表单*/ 43行处添加代码 ----------------------------------------------------------------------------------------------- <input name="email" type="hidden" id="email" value="<?=$r[email]?&g

[QNAP crontab 定時執行程式

注意要自動執行的 sh 檔不要放在 /root 裡, 不然韌體更新後檔案會不見, 要放在個人帳號的資料夾,例如 /share/homes/帳號/ QNAP 的 crontab 放在 /etc/config/crontab #vi /etc/config/crontab 例如要每日5:00執行 backup.sh 的話,加上這行 00 5 * * * /share/homes/帳號/backup.sh 存檔 套用設定#crontab /etc/config/crontab 重啟 crontab /

生成report由Eamil定時寄出

Blat 是一个命令行发邮件的小工具,仅支持简单的SMTP协议,需要SMTP服务器的支持. 官网:http://www.blat.net/    下载地址:https://sourceforge.net/projects/blat/files/ 二.示例 ①解压blat3219_32.full,进入C:\blat3219\full可以看到blat.exe可执行文件 ②bat批处理脚本@echo offdel c:\ip-report.txtdate/t >> c:\ip-report.txtt

python获取天气+email通知

信息抓取来源:http://www.tianqi.com/(天气网 ) 邮件服务器(发送):126邮箱 邮件服务器(接收):QQ邮箱 代码如下: #!/usr/bin/env python # -*- coding:utf-8 -*-  import smtplib import urllib,urllib2 import re #定义函数,发送邮件 def sendMail(body):     smtp_server = 'smtp.126.com'     from_mail = '[em

Oracle定时值执行存储过程

declare      jobno number;    begin      dbms_job.submit(     jobno,     'p_dosomething;',  --what     to_date('20090101020000','yyyy-mm-dd hh24:mi:ss'),--next_date,可以不填     Interval => 'TRUNC(sysdate) + 1 +2 / (24)'--'Interval时间字符串'--interval,关键设置  

[SharePoint 2010] SharePoint 2010上多人同時編輯Office 2010文件

Office 2010這個版本,提供了一個令人興奮的新功能,那就是它可以讓多人同時編輯一份Office 2010的文件. 這是一個很大的突破. 以往在與SharePoint搭配下的分享環境,檔案只能被簽出鎖定住,然後整個下載回Client端編輯,做完後再傳回去,文件簽入後其他人才能夠繼續編輯下去,這樣的方式造成了許多無謂的時間等待. 所以新一代Office 2010可以說大大改進了團隊協同運作的效率 Office 2010這個版本,提供了一個令人興奮的新功能,那就是它可以讓多人同時編輯一份Off

Oracle 数据库日常巡检

Oracle 数据库日常巡检 阅读目录 1. 检查数据库基本状况 2. 检查Oracle相关资源的使用情况 3. 检查Oracle数据库备份结果 4. 检查Oracle数据库性能 5. 检查数据库cpu.I/O.内存性能 6. 检查数据库安全性 7. 其他检查 回到顶部 1. 检查数据库基本状况 包含:检查Oracle实例状态,检查Oracle服务进程,检查Oracle监听进程,共三个部分. 1.1. 检查Oracle实例状态 select instance_name,host_name,sta