tigger
detail
?1?? 56
?2?? 85
?1?? 78
?2?? 96
?1?? 20
?2? 10
? 3? 20
report
?1? 154
?2? 191
當細表插入數據的時候,自動的在匯總表中進行匯總
觸發器
?什么時候觸發
? 在插入 detail表時觸發f
要進行判斷? ,例如我插入 1? 20 判斷 1在report中 是否已經存在,如果存在 則update
???????????????? 不存在 insert
在oracle 中 如果進行插入 首先會在內存中劃出一個區域用來臨時保存? 這個區域的名稱叫new???? new.id? new.price
??????????? 如果進行更新 首先會在內存中劃出一個區域用來臨時保存? 這個區域的名稱叫new old
????????????????????????? new用來保存你將存入的數據
????????????????????????? old用來保存將被你修改的老的數據
? ???? 如果進行刪除 首先會在內存中劃出一個區域用來臨時保存? 這個區域的名稱叫old
?create or replace trigger after_insert_getSum
? after insert
? on detail
?for each row
declare
?? isExit number(5) ; --用來保存
begin???????
?select count(*) into isExit from? report where id = :new.id;
??????? if (isExit > 0 ) then? --表示report表中已經存在,update
??update report set sumprice = sumprice + :new.price where id = :new.id;?
??????? else??? --表示report表中不存在,insert
???insert into report (id,sumprice) values (:new.id,:new.price);
??????? end if;
end;
?
序列的產生
在sql server中要使某個字段為自動增長字段有函數? IDENTITY(1,1)?
在oracle中是沒有這個函數的
(1)首先創建一個序列
?? CREATE SEQUENCE MYSEQUENCE INCREMENT BY 1 START WITH 1 MINVALUE 1 ORDER;
(2)創建觸發器使用上面的序列
?
for each row? --- 行級觸發器? 表示每行進行插入的時候進行觸發
沒有for each row? 表級觸發器??
raise 拋出一個自定義錯誤
if (inserting) then
end if
if(updating) then
end if
if(deleting) then
end if
?
總結
- 上一篇: PostgreSQL 不在使用tig
- 下一篇: 人生最大的危机就是没有危机感