在应用程序中,有些数据是垃圾数据,现在程序在前段提交的时候没有验证机制,补做代价比较大,我现在想能不能在后台oracle通过触发器,对插入动作进行验证,如果发现垃圾数据,直接删除,这样比做存储过程进行定时监控要减少系统资源的占用,但是我不知道如何实现,请高手指教!
---------------------------------------------------------------
使用临时表
11:04:36 SQL> CREATE GLOBAL TEMPORARY TABLE Tmp(
11:04:39 2 rid varchar2(20))ON COMMIT DELETE ROWS;
表已创建。
已用时间: 00: 00: 00.16
11:07:30 SQL> create or replace trigger trg_tb
11:07:36 2 after insert on tb
11:07:36 3 for each row
11:07:36 4 begin
11:07:36 5 if :new.col2='laji' then
11:07:36 6 insert into tmp values(:new.rowid);
11:07:36 7 end if;
11:07:36 8 end trg_tb;
11:07:36 9 /
触发器已创建
已用时间: 00: 00: 00.47
11:07:36 SQL> create or replace trigger trg_tb_del
11:07:44 2 after insert on tb
11:07:46 3 begin
11:07:46 4 delete from tb where exists(select 1 from tmp where rid=tb.rowid);
11:07:46 5 end trg_tb_del;
11:07:46 6 /
触发器已创建
已用时间: 00: 00: 00.31
11:08:59 SQL> select count(1) from tb;
COUNT(1)
----------
22
已用时间: 00: 00: 00.00
11:09:08 SQL> insert into tb(col1,col2) values('aaa','laji');
已创建 1 行。
已用时间: 00: 00: 00.00
11:09:12 SQL> select count(1) from tb;
COUNT(1)
----------
22
已用时间: 00: 00: 00.16
11:09:14 SQL>
说明刚才插入的数据已经被删除掉了。