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      => ‘[email protected]***.com‘, -- ***@oecgroup.com
            p_subject   => ‘Program Occurred Errors Notice‘,
            p_text_msg  => ‘‘,
            p_html_msg  => l_html,
            p_smtp_host => ‘spam.***.com‘,
            p_account   => ‘[email protected]***.com‘,
            p_password  => ‘***‘);
END;
/
时间: 2024-12-13 16:18:32

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

FileMaker中的腳本觸發器學習筆記

脚本触发器 **脚本触发器是始终绑定到用户布局接口.对于数据表或者字段.只有在而已接口才能触发. **如果某一个布局或者对象上包含触发器,则其右下角会有触发器图标 **当触发一个事件时,有且仅有一个触发器会被执行. 布局级别的触发器 **ONRECORDLOAD :加载记录后触发 **ONRECORDCOMMIT:在记录被更改前发 会提交的动作有:切换布局或者记录   按Enter键 **ONRECORDREVERT:在记录还原之前触发 **ONLAYOUTKEYSTROKE:在布局中接受击键时

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

关于这个内容,其实从ArcSDE9.2推出ST_Geometry就让用户感到很有吸引力,而且特别是在ArcSDE9.3之后,用户使用SQL操作ST_geometry越来越多,但是在配置Oracle监听来说总是碰到这样那样的问题,以下就是总结一下配置 Oracle 侦听器来使用SQL操作ST_Geometry . 首先说明一下:如果你的ArcSDE版本是9.2最好不要使用这种方式,因为Bug也是比较多的. 例如:http://support.esri.com/en/knowledgebase/te

Oracle的优化器介绍

Oracle优化器介绍 本文讲述了Oracle优化器的概念.工作原理和使用方法,兼顾了Oracle8i.9i以及最新的10g三个版本.理解本文将有助于您更好的更有效的进行SQL优化工作. RBO优化器 RBO是一种基于规则的优化器,随着CBO优化器的逐步发展和完善,在最新的10g版本中Oracle已经彻底废除了RBO.正在使用Oracle8i或9i的人们或多或少的都会碰到RBO,因此在详细介绍CBO之前,我们有必要简单回顾一下古老的RBO优化器. 在RBO中Oracle根据可用的访问路径和访问路

Oracle LSNRCTL------监听器的启动和关闭

对于DBA来说,启动和关闭oracle监听器是很基础的任务,但是Linux系统管理员或者程序员有时也需要在开发数据库中做一些基本的DBA操作,因此了解一些基本的管理操作对他们来说很重要. 本文将讨论用LSNRCTL命令启动.关闭和查看监听器的状态的方法. 怎样启动.关闭和重新启动oracle监听器 在启动.关闭或者重启oracle监听器之前确保使用lsnrctl status命令检查oracle监听器的状态.除了得到监听器的状态之外,你还可以从lsnrctl status命令的输出中得到如下的信

Oracle中的存储过程(Stored Procedure)

一.存储过程的定义 存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,存储在数据库中,经过第一次编译后再次调用不需要再次编译,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它.存储过程是数据库中的一个重要对象. 二.基本语法 创建存储过程 create procedure sp_name @[参数名] [类型],@[参数名] [类型] as begin ......... end 以上格式还可以简写成: create p

oracle监控资源管理器

资源管理器的配置在一组dba视图显示,主要是如下视图: dba_rsrc_plans 显示计划和状态. dba_rsrc_plan_directives 显示计划指令 dba_rsrc_consumer_groups 显示使用者组 当前情形显示在v$视图中: v$session 显示每个会话的活动使用者组 v$rsrc_plan 显示当前活动的计划 v$rsrc_consumer_group 显示活动计划中的指令对应的使用者组的统计信息. 如果会话受到资源管理器的影响,它就会显示为等待事件.会话

oracle em企业管理器的安装、配置及相关问题

2017-05-10 一.配置ORACLE_UNQNAME环境变量 二.重建EM资料库:emca -repos recreate 三.配置EM账号密码:DBSNMP.SYSMAN 四.配置EM资料库:emca -config dbcontrol db 五.解决Listener status UNKNOW 问题 六.企业生产环境EM外网端口映射 #查看EM进程 emctl status dbconsole #查看ORACLE_UNQNAME环境变量 select name, db_unique_n

3年前oracle命令行笔记,到现在还常用。

col 列名 for(mat) 格式 :可对列进行格式化(a100 是针对varchar 的格式,显示100个字符,可以a60,a80), 例如:col file_name format a100; col 列名:显示当前列的格式 clear column:清除所有列的格式 //主機名 HOST HOSTNAME; //幫助 HELP INDEX; //顯示當前環境變量值 SHOW ALL //顯示當前錯誤 SHOW ERR; //顯示數據庫版本 show rel //查看oracle版本 CO

VisualStateManager使用說明

Demo下載:http://yunpan.cn/cFjgPtWRHKH9H  访问密码 c4b7 顧名思義,視圖狀態管理器. 在WPF中,它的功能似乎更強大.在UWP中,閹割了GotElementState方法,導致它只能在控件內部使用. 這個東東一般用來突出某些操作,以提醒用戶.它原來是狀態A,後來用戶進行了某些操作,我們就會根據用戶的操作,判斷他想要做什麼,然後根據他的目的,顯示狀態B.最容易理解的例子就是按鈕,它普通狀態,鼠標放上去以後,變成了另一種狀態,點擊又是另一種狀態. 1.按鈕狀態