最近寫了一直Web Service給很多不同站的客戶端呼叫,并直接寄信通知程式中的異常。

直接在oracle中設置某張表的trigger(after insert),當有新的異常資料寫入時候,寄給相關站別的管理員。

/* Written by milo on 2017-03-09
*觸發器發送email
*/
CREATE OR REPLACE TRIGGER small_program_exception_afin
AFTER INSERT ON small_program_exception
FOR EACH ROW
DECLARE
l_html VARCHAR2(32767);
v_station_name varchar(300);
v_email_string varchar2(1000);
v_program_name varchar2(300);
v_station_code varchar(300);
BEGIN
/*
dbms_output.put_line('new.station: ' || :new.station);
dbms_output.put_line('new.program_id: ' || :new.program_id);
dbms_output.put_line('new.occurred_time: ' ||
to_char(:new.occurred_time, 'yyyy-mm-dd hh24:mm:ss'));
dbms_output.put_line('new.program_id: ' ||
substr(:new.exception_message, 1, 32767));
*/ BEGIN
--獲取程式名稱、接收人email以及站名稱
select s.stn_name, m.mail_for_error, p.name,s.stn_code
into v_station_name, v_email_string, v_program_name,v_station_code
from tk_cust_prog_m m, tk_cust_prog_d d, station s, tk_programe p
where m.custom_no = d.custom_no
and m.custom_no = s.stn_code
and d.prog_id = p.id
and d.prog_id = :new.program_id
and d.custom_no = :new.station;
exception
when no_data_found then
raise_application_error(-20001, 'No data found.');
--dbms_output.put_line('no_data_found');
--dbms_output.put_line('v_email_string: ' || v_email_string);
if (v_email_string is null or v_email_string = ' ') then
raise_application_error(-20001,
'Errors email recipient should not be empty, please type the recipient''s email address on the web-function');
end if;
END; l_html := '<html>
<head>
<title></title>
</head>
<body>
<p> Dear ' || v_station_code || '</p>
<p> This email is to notify you that an unexpected error occurred in the program. Please check it ASAP.</p>
<p> Exception Message</p>
<p> ------------------------------------------------------------------------------</p>
<p> <b>' || v_station_name || '</b></p>
<p> <b>' || v_program_name || '</b></p>
<p> Posted on ' ||
to_char(:new.occurred_time, 'mm-dd-yyyy hh24:mm:ss') || '</p>
<p> ' || substr(:new.exception_message, 1, 32767) || '</p>
<p> ------------------------------------------------------------------------------</p>
</body>
</html>'; send_mail(p_to => v_email_string,
p_from => 'milo@***.com', -- ***@oecgroup.com
p_subject => 'Program Occurred Errors Notice',
p_text_msg => '',
p_html_msg => l_html,
p_smtp_host => 'spam.***.com',
p_account => 'milo@***.com',
p_password => '***');
END;
/

Oracle觸發器調用procedure寄信的更多相关文章

  1. Postgresql 創建觸發器,刪除觸發器和 禁用觸發器

    CREATE OR REPLACE FUNCTION XF_VIP_AFUPD_WX() RETURNS trigger AS $$ DECLARE i_count integer; s_wx_ope ...

  2. SQL觸發器聯級刪除

    Create TRIGGER [dbo].[trigInstructionsDelete] ON dbo.Instructions instead OF DELETE AS BEGIN DECLARE ...

  3. 利用 Oracle EM 企业管理器 进行oracle SQL的优化(自动生成索引)

    利用 Oracle EM 企业管理器 进行oracle SQL的优化(自动生成索引) ##应用情景 项目中有大量的SQL,尤其是涉及到统计报表时,表关联比较多,当初开发建表时也没搞好索引关联的,上线后 ...

  4. Oracle SQL优化器简介

    目录 一.Oracle的优化器 1.1 优化器简介 1.2 SQL执行过程 二.优化器优化方式 2.1 优化器的优化方式 2.2 基于规则的优化器 2.3 基于成本的优化器 三.优化器优化模式 3.1 ...

  5. 怎么配置 Oracle 侦听器来使用SQL操作ST_Geometry

    关于这个内容,其实从ArcSDE9.2推出ST_Geometry就让用户感到很有吸引力,而且特别是在ArcSDE9.3之后,用户使用SQL操作ST_geometry越来越多,但是在配置Oracle监听 ...

  6. Oracle的优化器的RBO和CBO方式

      1.基于规则的优化方式(Rule-Based Optimization,简称为RBO)       优化器在分析SQL语句时,所遵循的是Oracle内部预定的一些规则,对数据是不敏感的.它只借助少 ...

  7. Oracle的优化器介绍

    Oracle优化器介绍 本文讲述了Oracle优化器的概念.工作原理和使用方法,兼顾了Oracle8i.9i以及最新的10g三个版本.理解本文将有助于您更好的更有效的进行SQL优化工作. RBO优化器 ...

  8. Oracle 服务器端执行带参数的procedure

    进入服务器后 su - oracle sqlplus schema/schemapass 连接上以后,输入以下,然后执行 declare vRet number(5) := 8; begin proc ...

  9. jQuery-menu-aim有時候不能觸發BUG解決辦法

    在使用jQuery-menu-aim菜單時有時候鼠標移上去會發現樣式有改變但是第二階菜單卻沒有出現的問題 解決辦法:在exitMenu的方法中加入return true; 如下所示: exitMenu ...

随机推荐

  1. Redis实战——安装

    借鉴来源:https://www.cnblogs.com/codersay/p/4301677.html redis官网地址:http://www.redis.io/ 最新版本: redis-4.0. ...

  2. Linux运维跳槽必备的40道面试精华题

    过一次年,结婚.存款.父母养老,一系列向钱看的事都在碾压我们本来还挺简单的神经,但难过没有出路,唯有找到好的方法和事业方向,才能实现一步一个脚印的逆袭. 下面是一名资深Linux运维求职数十家公司总结 ...

  3. VIM-美化你的标签栏

    vim的标签栏是一个比较有用的功能,我们可以通过gt和gT快捷键前后切换标签页,也可以用数字+gt的方式,快速跳转到某个标签页,但是默认的标签栏上标签序号并没有显示出来,在标签页较多的时候,想要通过数 ...

  4. Java网络编程小结 URLConnection协议处理器

    URL和URLConnection类 网络中的URL(Uniform Resource Locator)是统一资源定位符的简称.它表示Internet上某一资源的地址.通过URL我们可以访问Inter ...

  5. 01-nginx介绍及编译安装

    第一天的时候学过apache,nginx和apache一样都是一个WEB服务器.也就是说你的网站之所以可以在网上运行,总得有一台机器在为你提供服务,这台机器就是服务器.这台服务器通过什么软件在为你提供 ...

  6. CocoaPods私有库!!!!!!!!!!!(装逼特技)

    1http://www.jianshu.com/p/4b63dfbd8be7 2  修改工程下的.podspec文件,如 注意1: 验证库是否正确: pod lib lint --verbose -- ...

  7. H5 css学习

    p{text-indent:2em;}段前空两格   段落排版--行间距(行高) p{line-height:1.5em;} 段落排版--中文字间距.字母间距  h1{    letter-spaci ...

  8. 为什么要使用href=”javascript:void(0);”

    为什么要使用href=”javascript:void(0);”   href=”javascript:void(0);”这个的含义是,让超链接去执行一个js函数,而不是去跳转到一个地址,而void( ...

  9. 关于jdk7中 使用Collections的排序方法时报Comparison method violates its general contract!异常

    参考: Comparison method violates its general contract Comparison method violates its general contract! ...

  10. javascript运算符优先级顺序

    1 ()2 !.-(负号).++.-- 3 *./.%4 +.- 10-55 <.<=.<.>=6 ==.!=.===.!==.7 &&8 ||9 ?:10 = ...