Oracle觸發器調用procedure寄信
最近寫了一直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寄信的更多相关文章
- Postgresql 創建觸發器,刪除觸發器和 禁用觸發器
CREATE OR REPLACE FUNCTION XF_VIP_AFUPD_WX() RETURNS trigger AS $$ DECLARE i_count integer; s_wx_ope ...
- SQL觸發器聯級刪除
Create TRIGGER [dbo].[trigInstructionsDelete] ON dbo.Instructions instead OF DELETE AS BEGIN DECLARE ...
- 利用 Oracle EM 企业管理器 进行oracle SQL的优化(自动生成索引)
利用 Oracle EM 企业管理器 进行oracle SQL的优化(自动生成索引) ##应用情景 项目中有大量的SQL,尤其是涉及到统计报表时,表关联比较多,当初开发建表时也没搞好索引关联的,上线后 ...
- Oracle SQL优化器简介
目录 一.Oracle的优化器 1.1 优化器简介 1.2 SQL执行过程 二.优化器优化方式 2.1 优化器的优化方式 2.2 基于规则的优化器 2.3 基于成本的优化器 三.优化器优化模式 3.1 ...
- 怎么配置 Oracle 侦听器来使用SQL操作ST_Geometry
关于这个内容,其实从ArcSDE9.2推出ST_Geometry就让用户感到很有吸引力,而且特别是在ArcSDE9.3之后,用户使用SQL操作ST_geometry越来越多,但是在配置Oracle监听 ...
- Oracle的优化器的RBO和CBO方式
1.基于规则的优化方式(Rule-Based Optimization,简称为RBO) 优化器在分析SQL语句时,所遵循的是Oracle内部预定的一些规则,对数据是不敏感的.它只借助少 ...
- Oracle的优化器介绍
Oracle优化器介绍 本文讲述了Oracle优化器的概念.工作原理和使用方法,兼顾了Oracle8i.9i以及最新的10g三个版本.理解本文将有助于您更好的更有效的进行SQL优化工作. RBO优化器 ...
- Oracle 服务器端执行带参数的procedure
进入服务器后 su - oracle sqlplus schema/schemapass 连接上以后,输入以下,然后执行 declare vRet number(5) := 8; begin proc ...
- jQuery-menu-aim有時候不能觸發BUG解決辦法
在使用jQuery-menu-aim菜單時有時候鼠標移上去會發現樣式有改變但是第二階菜單卻沒有出現的問題 解決辦法:在exitMenu的方法中加入return true; 如下所示: exitMenu ...
随机推荐
- 通过CSS 给界面必选项添加星号
在制作网页的时候,如果一个选项是必填的,通常会给选项添加一个红色星号,来引起用户的注意:最近笔者刚好遇见一个类似的需求,本来可以用html标签和style就可搞定,由于笔者需要改动的界面比较多(六个) ...
- Android的SearchView详解
转自https://www.jianshu.com/p/7c1e78e91506 一.简述 SearchView是v7包中的一个兼容性控件,它可以单独使用,也可以配合menu+toolbar一起使用. ...
- Junit Test 的时候出错java.lang.IllegalStateException: Failed to load ApplicationContext
问题原因 JDK1.8 spring版本3.2.0RELEASE JDK和spring版本不兼容 解决方法 1.降低JDK版本到1.7 2.将spring的版本升级到4.0.0RELEASE或者 ...
- MFC常用函数总结
1.MFC编辑框.静态文本框相关的常用函数 <1>GetDlgItemText(ID ,str) 作用:从对话框中获取文本 第一个参数为要获取的编辑框(或者静态文本框.单选按钮等可以显示内 ...
- Codeforces 721E DP
大概思路及题意看这篇博客吧 我的理解:设f[i]表示处理到第i个区间,能唱的最多的歌,g[i]是保证f[i]最大时最靠左的点.那么f[i] = max(f[j] + (r[i] - max(l[i], ...
- 新手教程: 如何在新浪云计算SAE里部署代码
感谢 sou6 的投递 时间:2011-11-22 来源:老夏博客 SAE自2011-7-10日起,全面支持SVN代码部署,用户不仅可以通过任何SVN客户端部署代码,而且SAE现有的代码部署方式也已经 ...
- kubernetes基础环境配置
一.基础环境配置 环境详情 主机名(FQDN) IP地址(NAT) 描述 linux-node1.example.com eth0:192.168.56.11 1VCPU.2G内存.一块硬盘s da5 ...
- Python 执行js的2种解决方案-乾颐堂
第1种方案 SpiderMonkey是Mozilla项目的一部分,是一个用C语言实现的JavaScript脚本引擎, 该引擎分析.编译和执行脚本,根据JS数据类型和对象的需要进行内存分配及释放操作:利 ...
- $_SERVER['HTTP_REFERER']
$_SERVER['HTTP_REFERER']//获取前一个页面的url地址
- input修改placeholder中颜色和字体大小
input::-webkit-input-placeholder { /* placeholder颜色 */ color: #aab2bd; /* placeholder字体大小 */ font-si ...