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; /