PL/SQL基礎篇10(trigger)

 觸發器:

/*

   觸發器:當特定事件出現事自動執行的存儲過程,不能被顯試地調用

   功能: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)

)

-- 創建觸發器,關鍵字:triggerafterbeforeonfor 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;


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章