偶刚接触oracle不久,了解还不是很深,现在有个触发器的问题想请教一下
需求是这样的,数据库中有几个表,想在每个表上建立一个触发器;
触发器的功能是,一旦表中的数据有变化后,通过触发器记录一些信息到日志表里,日志表里主要记录字段
tb_name(变更的表名),n_operate(操作),new_record(改变的记录),t_time(时间)
其中
n_operate(操作)指对表的修改和删除,插入;
new_record(改变的记录)想包括整条变化的数据,每个表的字段数不一样,所以这个地方不知道怎么写好?
自己大致写了一个:
请各位帮忙填补一下上面的空 谢拉!
需求是这样的,数据库中有几个表,想在每个表上建立一个触发器;
触发器的功能是,一旦表中的数据有变化后,通过触发器记录一些信息到日志表里,日志表里主要记录字段
tb_name(变更的表名),n_operate(操作),new_record(改变的记录),t_time(时间)
其中
n_operate(操作)指对表的修改和删除,插入;
new_record(改变的记录)想包括整条变化的数据,每个表的字段数不一样,所以这个地方不知道怎么写好?
自己大致写了一个:
CODE:
CREATE OR REPLACE TRIGGER "tr_record"
BEFORE INSERT OR UPDATE OR DELETE
ON "tb_record"
REFERENCING OLD AS OLD NEW AS NEW
FOR EACH ROW
DECLARE
Begin
INSERT INTO TB_LOG(TB_NAME,N_OPERATE,NEW_RECORD,T_TIME) VALUES (
(TB_NAME)____,
(N_OPERATE)____,
(NEW_RECORD)____,
to_char(sysdate,'YYYYMMDDHH24MISS')
);
End;
横线空白的地方想用一个变量来代替不知道有没有? 单个的新记录我知道用:NEW. 就可以表示出来,但是想让他更具有可移植性不知道能不能实现?
BEFORE INSERT OR UPDATE OR DELETE
ON "tb_record"
REFERENCING OLD AS OLD NEW AS NEW
FOR EACH ROW
DECLARE
Begin
INSERT INTO TB_LOG(TB_NAME,N_OPERATE,NEW_RECORD,T_TIME) VALUES (
(TB_NAME)____,
(N_OPERATE)____,
(NEW_RECORD)____,
to_char(sysdate,'YYYYMMDDHH24MISS')
);
End;
请各位帮忙填补一下上面的空 谢拉!
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/266281/viewspace-495500/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/266281/viewspace-495500/