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. C# WinForm启动时的事件加载次序

  2. multiprocessing.dummy

    昨晚发现放在腾讯云主机上通过crontab定时执行用以爬去斗鱼分类页面数据的爬虫在执行的时候速度特别慢,于是想通过多线程来提高效率. 打开浏览器,键入关键字"python 多线程" ...

  3. django -- 内置分页

    urls.py from django.conf.urls import url from conn_oracle import views urlpatterns = [ url(r'^page/' ...

  4. Struts2 配置Action详解

     Struts2的核心功能是action,对于开发人员来说,使用Struts2主要就是编写action,action类通常都要实现com.opensymphony.xwork2.Action接口,并实 ...

  5. 【302】C# TreeView 控件使用说明

    参考:C# 中treeview 树节点图标的动态加载,及选中时图标改变 参考:C# TreeView 控件的综合使用方法 参考:TreeView 类 参考:TreeNode 类 1. 添加根和子级 通 ...

  6. Elasticsearch-PHP 安装

    安装 Elasticsearch-PHP只有三个要求你需要担心: PHP 5.3.9 或更高版本(查看更多信息) Composer ext-curl: Libcurl的PHP扩展 其它的依赖会通过Co ...

  7. Python实现阿里云短信推送

    本篇文章是使用Python的Web框架Django提供发送短信接口供前端调用,Python版本2.7 阿里云入驻.申请短信服务.创建应用和模板等步骤请参考:阿里云短信服务入门 1.下载sdk 阿里云短 ...

  8. node-mysql中防止SQL注入

    备注: 本文针对mysqljs/mysql. 为了防止SQL注入,可以将SQL中传入参数进行编码,而不是直接进行字符串拼接.在node-mysql中,防止SQL注入的常用方法有以下四种: 方法一:使用 ...

  9. 【FZU2178】礼物分配

    题意 在双胞胎兄弟Eric与R.W的生日会上,他们共收到了N个礼物,生日过后他们决定分配这N个礼物(numv+numw=N).对于每个礼物他们俩有着各自心中的价值vi和wi,他们要求各自分到的礼物数目 ...

  10. SpringBoot中使用AOP实现计算Service执行时间

    1.增加POM.XML的依赖架包 <!-- 引入 spring aop 依赖 --><dependency> <groupId>org.springframewor ...