现想对指定用户下的指定表都作一个操作记录,有一个logs表,
字段 类型
id number
objid varchar2(50) --操作表的ID字段
objname varchar2(20) --操作表的名称
optione varcahr2(20) --操作类型(增删改)
createtime date --logs记录创建时间需求就是,创建一个触发器,当对用户下的指定表进行增删改时,就对logs表增加一条操作记录。网上搜了很久都没有找到所要的答案,不知如何能自动得知操作表的ID号及正在进行的是那种类型的操作。
字段 类型
id number
objid varchar2(50) --操作表的ID字段
objname varchar2(20) --操作表的名称
optione varcahr2(20) --操作类型(增删改)
createtime date --logs记录创建时间需求就是,创建一个触发器,当对用户下的指定表进行增删改时,就对logs表增加一条操作记录。网上搜了很久都没有找到所要的答案,不知如何能自动得知操作表的ID号及正在进行的是那种类型的操作。
create or replace trigger tr
after update or delete or insert
on t
for each row
begin
if inserting then
insert into logs values(:new.id,:new.objid,:new.objname,'insert',sysdate);
elsif updating then
insert into logs values(:old.id,:old.objid,:old.objname,'update',sysdate);
elsif deleting then
insert into logs values(:old.id,:old.objid,:old.objname,'delete',sysdate);
end if;
end;
谢谢你的读贴,不过你这个触发器,并不能执行呀!会报错的ORA-04098
after update or delete or insert
on t_test
for each row
begin
if inserting then
insert into t_logs values(seq_logid.nextval,:old.objid,:old.objname,'insert',sysdate);
elsif updating then
insert into t_logs values(seq_logid.nextval,:old.objid,:old.objname,'update',sysdate);
elsif deleting then
insert into t_logs values(seq_logid.nextval,:old.objid,:old.objname,'delete',sysdate);
end if;
end; logs表我是按前面所说的字段类型来建的。其中seq_logid.nextval是oracle的序列号来的。一执行insert就报ora-04098的错,请问如何解决呢?
在线等....谢谢!
for each row
referencing new as newname old as oldname
id number
objid varchar2(50) --操作表的ID字段
objname varchar2(20) --操作表的名称
optione varcahr2(20) --操作类型(增删改)
createtime date --logs记录创建时间 创建表logscreate or replace trigger tr_test
after update or delete or insert
on t_test
for each row
begin
if inserting then
insert into t_logs values(seq_logid.nextval,:old.id,'t_test','insert',sysdate);
elsif updating then
insert into t_logs values(seq_logid.nextval,:old.id,'t_test','update',sysdate);
elsif deleting then
insert into t_logs values(seq_logid.nextval,:old.id,'t_test','delete',sysdate);
end if;
end;
多谢谢1楼及7楼的,按7楼的所言,明白了old.xx的意思,所有将old.objid改为old.id,由于我更改的表里没有指定表名,所以就直接写死了。谢谢~