时间:2021-07-01 10:21:17 帮助过:3人阅读
欢迎进入Oracle社区论坛,与200万技术人员互动交流 >>进入 运行本文的示例前,请对当前的数据表的插入、删除、更新等进行记录,并把操作日期、操作者、原来数据、现在数据都作为备份,以便在当前备出现问题的时候能够给以恢复。 注释:最好把备份表放在不同
欢迎进入Oracle社区论坛,与200万技术人员互动交流 >>进入
运行本文的示例前,请对当前的数据表的插入、删除、更新等进行记录,并把操作日期、操作者、原来数据、现在数据都作为备份,以便在当前备出现问题的时候能够给以恢复。
注释:最好把备份表放在不同的磁盘上或不同的数据库中:
1、建立用于数据备份及操作记录的表:
CREATE TABLE AUD_PRGAMD1( W_ROWID VARCHAR2(50), --行ID W_ACTION VARCHAR2(1), --操作 DTTM DATE, --操作日期 OPUSER VARCHAR2(30), --操作者 B$CODE VARCHAR2(10), --原表中的CODE A$CODE VARCHAR2(10), --现表中的CODE B$FTY VARCHAR2(1), --原表中的FTY A$FTY VARCHAR2(1) ?现表中的FTY ); |
2、建立实际数据表:
create table prgamd ( code varchar2(20), fty varchar2(20) ) |
3、创建自动备份触发器:
CREATE or replace TRIGGER AUD_PRGAMD_TRIGGER AFTER INSERT OR UPDATE OR DELETE ON PRGAMD FOR EACH ROW DECLARE V_ROWID VARCHAR2(50); V_ACTION VARCHAR2(1); V_OPUSER VARCHAR(30):='UNKNOW'; BEGIN IF INSERTING THEN V_ROWID:=:NEW.ROWID; V_ACTION:='I'; ELSIF UPDATING THEN V_ROWID:=:NEW.ROWID; V_ACTION:='U'; ELSIF DELETING THEN V_ROWID:=:OLD.ROWID; V_ACTION:='D'; END IF; V_OPUSER:=USER; INSERT INTO AUD_PRGAMD1( W_ROWID, W_ACTION, DTTM, OPUSER, B$CODE, B$FTY, A$CODE, A$FTY ) VALUES( V_ROWID, V_ACTION, SYSDATE, V_OPUSER, :OLD.CODE, :OLD.FTY, :NEW.CODE, :NEW.FTY ); END; |
注释:以上的OLD表示被操作表中原来的数据指向,NEW表示被操作表中现在的数据指向。
4、操作测试:
insert into prgamd values('x','x'); select * from AUD_PRGAMD1 select * from prgamd; update prgamd set code='m1' where fty='x'; commit; |