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 => '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通知的更多相关文章

  1. WordPress公布新文章Email通知注冊用户

    非常多WordPress博客都开放了用户注冊的功能,用户能够參与到博客的内容建设其中来.也就是一个博客由多个用户来写.如今有这种需求,怎样实如今某一个用户发表文章后.其它用户都能收到Email通知?以 ...

  2. Oracle發送email功能

    Oracle 提供一個一個UTL_SMTP,可以發送email,結合oracle本身強大的schedule功能,比寫一隻排程效率高,且更簡單. split功能 /*創建package STRING_F ...

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

    说明:修改1:e/admin/tool/ReGook.php   /*回复表单*/ 43行处添加代码 ------------------------------------------------- ...

  4. Oracle臨時表空間過大問題解決

    查詢資料庫伺服器時,發現資料庫伺服器磁片使用空間達到了98%,分析總共的資料檔案也不可能達到如此大,經過查詢發現原來臨時表空間的使用方式達到了 32G,導致磁碟空間使用緊張.搜索了相應的文檔與資料後, ...

  5. [QNAP crontab 定時執行程式

    注意要自動執行的 sh 檔不要放在 /root 裡, 不然韌體更新後檔案會不見, 要放在個人帳號的資料夾,例如 /share/homes/帳號/ QNAP 的 crontab 放在 /etc/conf ...

  6. sqlserver定時備份

    通常备份的方式有两种:手动备份和自动备份,如果数据库服务器中有这么多的数据库需要备份,那么手动备份必定是一个很大的工作量,这个时候我们可以采用另外一种备份方式---定时自动备份. SQLServer的 ...

  7. JS 定時刷新父類頁面

    function timeCount() { var url = "MAC.aspx"; parent.location.href = url; } function beginC ...

  8. 生成report由Eamil定時寄出

    Blat 是一个命令行发邮件的小工具,仅支持简单的SMTP协议,需要SMTP服务器的支持. 官网:http://www.blat.net/    下载地址:https://sourceforge.ne ...

  9. Oracle定时值执行存储过程

    declare      jobno number;    begin      dbms_job.submit(     jobno,     'p_dosomething;',  --what   ...

随机推荐

  1. leetcode844

    class Solution { public: bool backspaceCompare(string S, string T) { stack<char> ST1; ; i < ...

  2. Javascript中prototype属性详解 (存)

    Javascript中prototype属性详解   在典型的面向对象的语言中,如java,都存在类(class)的概念,类就是对象的模板,对象就是类的实例.但是在Javascript语言体系中,是不 ...

  3. CBCentralManagerDelegate Protocol 委托协议相关分析

    总体概述 CBCentralManagerDelegate 协议中定义了一系列方法列表,这些方法是委托对象必须要实现的方法(也有可选择的),当中央管理器的相应变化就会调用委托对象中实现的相应方法. M ...

  4. java web 读取配置文件两种方法

    package com.tsinghua.getDataBaseConn; import java.io.IOException;import java.io.InputStream;import j ...

  5. 违反“Don’t Modify Objects You Don’t Own”原则对SharePoint页面带来的影响

    最近看了一本相当不错的JavaScript书,<Maintainable JavaScript>(中文版叫做<编写可维护的JavaScript>),"Don't Mo ...

  6. easyui 验证框

    转自:http://blog.csdn.net/pqszq1314/article/details/25896163 例如 校验输入框只能录入0-1000之间 最多有2位小数的数字 表单<inp ...

  7. VUE+WebPack游戏开发:神庙逃亡的游戏设计

  8. lnline Hook初试

    简单解释下hook: 钩子(Hook),是Windows消息处理机制的一个平台,应用程序可以在上面设置子程以监视指定窗口的某种消息,而且所监视的窗口可以是其他进程所创建的.当消息到达后,在目标窗口处理 ...

  9. 如何安装Zend Studio 以及汉化和基本准备工作

    昨天从早上一直弄到晚上10点,可累死我了,网上的资料都是掺次不齐,所以我写一篇系统点的文章来告诉大家怎么做. 1.如果你想进行一套PHP系统的开发,肯定是要有“尚方宝剑”的,这个尚方宝剑就是PHP工具 ...

  10. file_get_contents无法请求https连接的解决方法 php开启curl

    file_get_contents无法请求https连接的解决方法 方法1: PHP.ini默认配置下,用file_get_contents读取https的链接,就会如下错误: Warning: fo ...