oracle 触发器 求教!!
对一个图书表里有仓库的id。创建一个触发器对每个仓库的数量进行求和 并把数量值放入仓库表中
------解决方案--------------------
--假设图书表是BOOK,仓库表是STORAGE
CREATE OR REPLACE TRIGGER TRIGGER_BOOK
--创建一个触发器,时机:在插入或者更新或者删除FOO表中记录的时候
AFTER INSERT OR UPDATE OR DELETE ON FOO
FOR EACH ROW
DECLARE
N_COUNT NUMBER(10); --变量,用于保存BOOK的数量
BEGIN
SELECT COUNT(1) INTO N_COUNT FROM BOOK ;
INSERT INTO STORAGE VALUES(N_COUNT); --插入到仓库表STORAGE表中
END;
大致上修改一下了,我还以为是将图书的数量放在仓库里面去.思路是这样子的.
另外,我觉着这种需求使用物化视图(实体化视图)会更好一些,个人建议.
------解决方案--------------------
--假设图书表是BOOK,仓库表是STORAGE,如果没有仓库表,先初始化建立个,有了的话就无所谓
--初始化仓库表
create table storage
as
select storage_id, count(1) as book_cnt from book group by storage_id;
CREATE OR REPLACE TRIGGER TRIGGER_BOOK
--创建一个触发器,时机:在插入或者更新或者删除FOO表中记录的时候
--修改机制是用的merge,原因是对于存在数据和不存在数据情况下处理不同。
AFTER INSERT OR UPDATE OR DELETE ON BOOK
FOR EACH ROW
DECLARE
BEGIN
merge into STORAGE a
using (select count(1) as cnt from book where storage_id=:new.storage_id) b
on (a.storage_id=b.storage_id)
when matched then update set book_cnt =cnt
when not matched then insert values(:new.storage_id,cnt);
commit;
END;
1L兄弟的处理流程稍微有点问题,既然作触发器,就是每次有图书变更时都会触发,那仓库表不是有N条记录了?
现在在家呢,没法测试,应该没啥问题。