觸發器:
/*
觸發器:當特定事件出現事自動執行的存儲過程,不能被顯試地調用
功能:1.自動生成數據;2.自定義複雜的安全權限;3.提供審計和日誌記錄;4.啓用複雜的業務邏輯
*/
create table deptinfo(
deptid number primary key,
dname varchar2(20),
empnum number
)
create table employee(
eid number primary key,
ename varchar2(20),
deptid number references deptinfo(deptid)
)
-- 創建觸發器,關鍵字:trigger,after,before,on,for each row
create or replace trigger tri_deptNum
after -- 有before after instead of
insert or update or delete on employee -- 對employee操作
for each row -- 注意別忘了 for each row
begin
if inserting then -- 用ing形式
update deptinfo set empnum = empnum + 1 where deptid = :new.deptid;
elsif updating then -- ing形式,去掉e,與英文語法一致
update deptinfo set empnum = empnum - 1 where deptid = :old.deptid;
update deptinfo set empnum = empnum + 1 where deptid = :new.deptid;
elsif deleting then
update deptinfo set empnum = empnum - 1 where deptid = :old.deptid;
end if;
end;
-- 測試
select * from deptinfo;
insert into deptinfo values(1,'長安大學',0);
insert into deptinfo values(2,'helloworld',0);
insert into employee values(1,'ysjain',1);
insert into employee values(2,'ysjain',1);
insert into employee values(3,'ysjain',2);
insert into employee values(4,'ysjain',2);
delete from employee where eid = 1;
update employee set deptid = 2 where deptid = 1;
select * from employee;