Oracle 触发器 删除操作时再查询本表数据 功能不正确
2015-02-13 13:12 钟铧若岩 阅读(2260) 评论(1) 编辑 收藏 举报背影如下:
表名,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;
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· 展开说说关于C#中ORM框架的用法!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?