触发器规范

1.3 术语和缩略语#

此处请填入文档中的专业术语及解释。


序号 术语/缩略语 全称和说明
1 Trigger(触发器) 触发器:当用户在数据库中进行特定的操作时触发执行的过程
2 功能开关 指在表中记录标志,根据标志来控制程序的运行

2 作用范围#

  • 2.1跟踪记录数据的变化,跟踪结果可用于纠错和日后审计
  • 2.2同步数据,根据设计要求,对数据的修改来同步处理其他表的数据
  • 2.3数据规则检查,根据业务规则对写入表中的数据进行检查
  • 2.4数据替换,根据设计要求,对写入表中的数据进行强制替换。
  • 2.5其他

3、技术规范 #

3.1 对Trigger中的每个功能模块必须要用开关控制功能模块是否启用

这样可以减少因功能模块的变化而导致的程序修改。


3.2 所有的Trigger必须要有错误控制,错误控制必须要明确是哪个功能模块抛出的异常

可以便于定位错误发生的程序段。所有的Trigger运行异常都要有记录,并记录在相同的表中

4、Trigger开发规范#

4.1、TRIGGER管理表:#


表名 功能
TR_SWITCH 触发子开关表,用于控制触发子的某部分功能是否运行的开关
TR_ERROR_LOG 错误日志表:是用来记录Trigger执行过程中发生的错误,此表是所有的Trigger公用的


4.1.1、TR_SWITCH#
触发子开关表,用于控制触发子的某部分功能是否运行的开关

 create table TR_SWITCH (   TRIGGER_NAME VARCHAR2(30),   SWITCH_FOR   VARCHAR2(20),   STATUS       VARCHAR2(1) default '1' ); -- Add comments to the table 

comment on table TR_SWITCH

  is 'trigger功能控制表'; -- Add comments to the columns 

comment on column TR_SWITCH.TRIGGER_NAME

  is '触发器名'; comment on column TR_SWITCH.SWITCH_FOR

  is '开关内容'; comment on column TR_SWITCH.STATUS

  is '是否打开'; -- Create/Recreate primary, unique and foreign key constraints 

alter table TR_SWITCH

  add constraint PK_TR_SWITCH primary key (TRIGGER_NAME, SWITCH_FOR); -- Create/Recreate check constraints 

alter table TR_SWITCH

  add constraint NN_TR_SWITCH_FOR

  check ("SWITCH_FOR" IS NOT NULL); alter table TR_SWITCH

  add constraint NN_TR_SWITCH_STATUS

  check ("STATUS" IS NOT NULL); alter table TR_SWITCH

  add constraint NN_TR_SWITCH_TRIGGER

  check ("TRIGGER_NAME" IS NOT NULL);

列名 数据类型 中文描述
TRIGGER_NAME VARCHAR2(30) 触发器名
SWITCH_FOR VARCHAR2(20) 开关内容
STATUS VARCHAR2(1) 是否打开


4.1.2、R_ERROR_LOG#
错误日志表:是用来记录Trigger执行过程中发生的错误,此表是所有的Trigger公用的。这个表要定制清理策略
 create table TR_ERROR_LOG (   ERROR_NO      VARCHAR2(10),   ERROR_MESSAGE VARCHAR2(200),   TRIGGER_NAME  VARCHAR2(30),   TRIGGER_USER  VARCHAR2(30),   TRIGGER_DATE  DATE,   ERROR_COMMENT VARCHAR2(300) ); -- Add comments to the table 

comment on table TR_ERROR_LOG

  is '错误日志表'; -- Add comments to the columns 

comment on column TR_ERROR_LOG.ERROR_NO

  is '系统错误代码'; comment on column TR_ERROR_LOG.ERROR_MESSAGE

  is '系统错误信息'; comment on column TR_ERROR_LOG.TRIGGER_NAME

  is '出错trigger'; comment on column TR_ERROR_LOG.TRIGGER_USER

  is '操作用户'; comment on column TR_ERROR_LOG.TRIGGER_DATE

  is '操作时间'; comment on column TR_ERROR_LOG.ERROR_COMMENT

  is '出错详细信息'; -- Create/Recreate check constraints 

alter table TR_ERROR_LOG

  add constraint NN_TR_ERROR_LOG_ERRNO

  check ("ERROR_NO" IS NOT NULL); alter table TR_ERROR_LOG

  add constraint NN_TR_ERROR_LOG_TRDATE

  check ("TRIGGER_DATE" IS NOT NULL); alter table TR_ERROR_LOG

  add constraint NN_TR_ERROR_LOG_TRNAME

  check ("TRIGGER_NAME" IS NOT NULL); alter table TR_ERROR_LOG

  add constraint NN_TR_ERROR_LOG_TRUSER

  check ("TRIGGER_USER" IS NOT NULL);

列名 数据类型 中文描述
ERROR_NO VARCHAR2(10) 系统错误代码
ERROR_MESSAGE VARCHAR2(200) 系统错误信息
TRIGGER_NAME VARCHAR2(30) 出错trigger
TRIGGER_USER VARCHAR2(30) 操作用户
TRIGGER_DATE DATE 操作时间
ERROR_COMMENT VARCHAR2(300) 出错详细信息


4.2、Trigger body样例#

 /**Trigger body的写法,最重要的部分是Raise;**/ CREATE OR REPLACE TRIGGER XXXX Begin ... EXCEPTION
  --记录异常信息   when others then     v_sqlcode := sqlcode;     v_sqlerrm := substr(sqlerrm, 1, 200);     gcc_trigger_pkg.write_error_log(v_sqlcode,                                     v_sqlerrm,                                     v_trigger_name,                                     v_trigger_user,                                     v_trigger_date,                                     v_error_comment);   Raise; END; / /**写日志自治事务包gcc_trigger_pkg.write_error_log 代码如下,最关键部分就是自治事务的声明 pragma autonomous_transaction**/ CREATE OR REPLACE Package GCCIWSDATA.gcc_trigger_pkg is   /**
  **trigger异常时将错误信息写入日志表gcc_tr_error_log
  **/ procedure write_error_log(     error_no       in varchar2,         --系统错误代码     error_message  in varchar2,         --系统错误信息     trigger_name   in varchar2,         --出错的trigger
    trigger_user   in varchar2,         --出错的用户     trigger_date   in date,             --出错的时间     error_comment  in varchar2          --出错详细信息 ); end gcc_trigger_pkg; / CREATE OR REPLACE Package Body GCCIWSDATA.gcc_trigger_pkg is   /**
  **trigger异常时将错误信息写入日志表gcc_tr_error_log
  **/ procedure write_error_log(     error_no       in varchar2,         --系统错误代码     error_message  in varchar2,         --系统错误信息     trigger_name   in varchar2,         --出错的trigger
    trigger_user   in varchar2,         --出错的用户     trigger_date   in date,             --出错的时间     error_comment  in varchar2          --出错详细信息 ) is   pragma autonomous_transaction; begin   insert into gcc_tr_error_log
    (error_no,      error_message,      trigger_name,      trigger_user,      trigger_date,      error_comment
     )   values
    (error_no,      error_message,      trigger_name,      trigger_user,      trigger_date,      error_comment);   commit; end write_error_log; end gcc_trigger_pkg; /

转载于:https://my.oschina.net/u/729507/blog/88678

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值