日期:2014-05-17 浏览次数:20890 次
--假设图书表是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;