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 => '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通知的更多相关文章
- WordPress公布新文章Email通知注冊用户
非常多WordPress博客都开放了用户注冊的功能,用户能够參与到博客的内容建设其中来.也就是一个博客由多个用户来写.如今有这种需求,怎样实如今某一个用户发表文章后.其它用户都能收到Email通知?以 ...
- Oracle發送email功能
Oracle 提供一個一個UTL_SMTP,可以發送email,結合oracle本身強大的schedule功能,比寫一隻排程效率高,且更簡單. split功能 /*創建package STRING_F ...
- 帝国留言板管理员回复发送EMAIL通知客户
说明:修改1:e/admin/tool/ReGook.php /*回复表单*/ 43行处添加代码 ------------------------------------------------- ...
- Oracle臨時表空間過大問題解決
查詢資料庫伺服器時,發現資料庫伺服器磁片使用空間達到了98%,分析總共的資料檔案也不可能達到如此大,經過查詢發現原來臨時表空間的使用方式達到了 32G,導致磁碟空間使用緊張.搜索了相應的文檔與資料後, ...
- [QNAP crontab 定時執行程式
注意要自動執行的 sh 檔不要放在 /root 裡, 不然韌體更新後檔案會不見, 要放在個人帳號的資料夾,例如 /share/homes/帳號/ QNAP 的 crontab 放在 /etc/conf ...
- sqlserver定時備份
通常备份的方式有两种:手动备份和自动备份,如果数据库服务器中有这么多的数据库需要备份,那么手动备份必定是一个很大的工作量,这个时候我们可以采用另外一种备份方式---定时自动备份. SQLServer的 ...
- JS 定時刷新父類頁面
function timeCount() { var url = "MAC.aspx"; parent.location.href = url; } function beginC ...
- 生成report由Eamil定時寄出
Blat 是一个命令行发邮件的小工具,仅支持简单的SMTP协议,需要SMTP服务器的支持. 官网:http://www.blat.net/ 下载地址:https://sourceforge.ne ...
- Oracle定时值执行存储过程
declare jobno number; begin dbms_job.submit( jobno, 'p_dosomething;', --what ...
随机推荐
- Python 位运算符 逻辑运算符 成员运算符
位运算符 运算符 描述 实例 & 按位与运算符:参与运算的两个值,如果两个相应位都为1,则该位的结果为1,否则为0 (a & b) 输出结果12 ,二进制解释:0000 1100 | ...
- 网卡流量监控脚本 ( Python )
#!/usr/bin/env python # coding: utf-8 # author: Xiao Guaishou try: import psutil except ImportError: ...
- Spring、Springboot常用注解:@Qualifier(不定时更新)
1.@Qualifier 出现场景: 老项目中有多个实现类实现同一个接口时,或者一个项目中有多个数据源时,spring容器不知道该注入哪个实现类或者使用哪个数据源,该注解就派上用场. 1)多实现类实现 ...
- Sunday
字符串匹配中最简单的算法: 基本思路:wandderwonder wonder 建立256个长的next数组,记录每个字符最后一次出现的位置. 设mark1 = 0: 和 mark2 = 0:flag ...
- zfs mount
root@47abd5c91421:/# ls /native/sbin autopush cryptoadm dhcpinfo dlstat flowadm ibd_ ...
- SaltStack 的插件特性
:first-child { margin-top: 0; } blockquote > :last-child { margin-bottom: 0; } img { border: 0; m ...
- 35. Search Insert Position (Array; Divide-and-Conquer)
Given a sorted array and a target value, return the index if the target is found. If not, return the ...
- UNITY调用安桌方法出现 JNI: Init'd AndroidJavaClass with null ptr!
UNITY调用安桌方法出现 JNI: Init'd AndroidJavaClass with null ptr! 原因是····· 得运行在一个真正的Android设备上! 得运行在一个真正的And ...
- unity与android交互总结
http://www.jianshu.com/p/4739ce2f4cd1 http://www.cnblogs.com/suoluo/p/5443889.html http://www.th7.cn ...
- MySQL多表查询回顾
----------------------siwuxie095 MySQL 多表查询回顾 以客户和联系人为例(一对多) 1.内连接 /*内连接写法一*/ select * from t_custom ...