CREATE OR REPLACE TRIGGER AA_TEMP before DELETE ON AA FOR EACH ROW declare total number; n number; BEGIN total:=(select count(1) from aa); n:=(select count(1) from aa where A=:old.a); UPDATE BB SET B=total-n; END; /
oracle 中,行级触发器中不允许读取或修改变化表, 不允许修改或读取触发表的限制表的主键,唯一值键和外键。变化表就是触发你的触发器的语句产生的变化的表。这里也就是a表 限制表就是对a表而言受了某些限制的比如用a表的主键做外键的表。你的语句犯了第一个错误。对a表进行了读取SELECT COUNT(*) FROM AA可以试着用语句级触发器铙过这个限制。《ORACLE8—SQL高级指南》中触发器章有讲。去找找下载来看看吧
我是用替代触发解决问题的老板觉得不爽,要我换成别的方式; --washy781231(木木) :兄弟 请问语句级的触发是不是改成如下就可 CREATE OR REPLACE TRIGGER AA_TEMP AFTER DELETE ON AA BEGIN UPDATE BB SET B=(SELECT COUNT(*) FROM AA); END; /我对Oracle接触时间不长,请问同志们 有哪些经典资料和技巧呀!
before DELETE ON AA
FOR EACH ROW
declare
total number;
n number;
BEGIN
total:=(select count(1) from aa);
n:=(select count(1) from aa where A=:old.a);
UPDATE BB SET B=total-n;
END;
/
不允许修改或读取触发表的限制表的主键,唯一值键和外键。变化表就是触发你的触发器的语句产生的变化的表。这里也就是a表
限制表就是对a表而言受了某些限制的比如用a表的主键做外键的表。你的语句犯了第一个错误。对a表进行了读取SELECT COUNT(*) FROM AA可以试着用语句级触发器铙过这个限制。《ORACLE8—SQL高级指南》中触发器章有讲。去找找下载来看看吧
Oracle Developer 开发者论坛http://61.144.28.248/d6i/bbs_armok01/bbs_content.jsp?bbsSerialNo=7722&bbsPageNo=1
這裡東東很全的
--washy781231(木木) :兄弟
请问语句级的触发是不是改成如下就可
CREATE OR REPLACE TRIGGER AA_TEMP
AFTER DELETE ON AA
BEGIN
UPDATE BB SET B=(SELECT COUNT(*) FROM AA);
END;
/我对Oracle接触时间不长,请问同志们 有哪些经典资料和技巧呀!