Oracle 触发器 删除操作时再查询本表数据 功能不正确
2015-02-13 13:12 钟铧若岩 阅读(2248) 评论(0) 编辑 收藏 举报背影如下:
表名,WFGTEST
1 create table WFGTEST 2 ( 3 NAME1 VARCHAR2(256) not null, 4 NAME2 VARCHAR2(256), 5 CAPACITY NUMBER(20,3) 6 )
表结构如下:
NAME1 | NAME2 | CAPACITY |
---|---|---|
wfg | wfg | 1.000 |
1.000 | ||
lxx | lxx | 2.000 |
wly | wly | 2.000 |
现在想实现的效果如下:
如果这个表里相同的CAPACITY都被删除完时,向另一个表里插入一个计数,
如1.000被全部删除完时,向另一个表里插入记录如下,也就是说DELETE时,需要再查询本表是否还有与此次删除相同的CAPACITY,如果没有,那么就向另一个表里添加记录
CAPACITYTYPE | DELETETIME |
1.000 | 2015/02/13 |
那么这个触发器应该怎么写呢?
1 CREATE OR REPLACE TRIGGER "TRIGGER_WFGTEST" AFTER 2 DELETE ON "WFGTEST" FOR EACH ROW 3 DECLARE nRMSFLAG number; 4 nFindSelft number; 5 6 pragma autonomous_transaction; 7 8 BEGIN 9 --------------------------------------------------------------------------------- 10 IF DELETING THEN 11 SELECT COUNT(*) INTO nFindSelft FROM WFGTEST WHERE CAPACITY =:OLD.CAPACITY; 12 IF nFindSelft =1 THEN 13 INSERT INTO "WFGTEST2" VALUES(:OLD.NAME2,sysdate); 14 END IF; 15 commit; 16 END IF; 17 18 END IF; 19 ---------------------------------------------------------------------------------- 20 --END IF; 21 /* PLEASE CHANGE THE NAME*/ 22 END TRIGGER_WFGTEST;
下面有两个SQL代码测试,有不明白的地方请高手指导:
1 --这样执行的话,无法统计 2 delete from wfgtest where capacity = 1.000; 3 commit; 4 5 --这样执行就能统计,请问为什么? 6 delete from wfgtest where name1 = 'wfg'; 7 delete from wfgtest where name1 = 'qq'; 8 commit;