最近寫了一直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. 使用JAVA爬取京东商品价格

    有一件物品,你想看看它在京东下所有搜索结果的价格,要怎么办呢? 京东这个网站还是很好爬的,所有价格信息都写在了Html里面,而且跳到第二页之后,url也是有规律的,基本没有什么技术难度. 例如:想找i ...

  2. python操作docx文档(转)

    python操作docx文档 关于python操作docx格式文档,我用到了两个python包,一个便是python-docx包,另一个便是python-docx-template;,同时我也用到了很 ...

  3. KVM镜像image 转换 调整

    qemu-img create -f raw test.raw 8G 创建一个raw格式,大小为8G的镜像. qemu-img info disk1.qcow2     #查看镜像大小及实际占用多少空 ...

  4. mysql数据库怎么安装到自己的电脑上?

    安装mysql1.安装过程中输⼊入Y确认继续安装 2.设置密码1.第⼀一次设登陆密码 2.第⼆二次验证密码 安装完成

  5. MySQL数据库篇之索引原理与慢查询优化之一

    主要内容: 一.索引的介绍 二.索引的原理 三.索引的数据结构 四.聚集索引与辅助索引 五.MySQL索引管理 六.测试索引 七.正确使用索引 八.联合索引与覆盖索引 九.查询优化神器--explai ...

  6. Excel VBA入门(五)Excel对象操作

    本章是本系列教程的重点.但我觉得应该不是难点.从第零章开始到学完本章,应该可以把VBA用于实战中了. Excel对象主要有4个: 工作薄 Workbook 工作表 Worksheet 单元格区域 Ra ...

  7. kali linux:wireshark不能被root用户启用的解决方案

    启动wireshark后,报错: 该界面提示在init.lua文件中使用dofile函数禁用了使用超级用户运行wireshark.这是因为wireshark工具是使用Lua语言编写的,并且在kali ...

  8. 新做的系统,第一次拉maven项目时,鼠标左键+ctrl键不能进方法

    对项目选择属性,跳转至:选择以下步骤

  9. CloudStack 4.3功能前瞻

    今天CloudStack 4.3已经Feature Freeze了,不会再有新功能加入到这个版本里.我们也可以坐下来看看哪些功能是值得期待的.首先,4.3的UI也秉承扁平化设计,看着更加简洁清爽.见下 ...

  10. 制作initramfs/initrd镜像

    Linux kernel在自身初始化完成之后,需要能够找到并运行第一个用户程序(这个程序通常叫做"init"程序).用户程序存在于文件系统之中,因此,内核必须找到并挂载一个文件系统 ...