一个简单的trigger,实现当操纵员工表时自动将员工人数统计到部门表中。

SQL> create table dept(dno int,dname varchar(20),population int);

 
表已创建。
 
SQL> create table emp(eid int,ename varchar2(20),dno int);
 
表已创建。
 
SQL> desc emp
 名称                                      是否为空? 类型
 ----------------------------------------- -------- ----------------------------
 
 EID                                                NUMBER(38)
 ENAME                                              VARCHAR2(20)
 DNO                                                NUMBER(38)
 
SQL> desc dept
 名称                                      是否为空? 类型
 ----------------------------------------- -------- ----------------------------
 
 DNO                                                NUMBER(38)
 DNAME                                              VARCHAR2(20)
 POPULATION                                         NUMBER(38)
 
SQL> insert into dept values (11,'sale',0);
 
已创建 1 行。
 
SQL> insert into dept values (12,'market',0);
 
已创建 1 行。
 
SQL> insert into dept values (13,'study',0);
 
已创建 1 行。
 
SQL> create or replace trigger trigger01
  2  after delete or insert or update on emp
  3  for each row
  4  begin
  5  if inserting then            --增加一个员工时,使对应部门人数加1
  6  update dept set population=population+1
  7  where dept.dno=:new.dno;
  8  elsif deleting then       --减少一个员工时,使对应部门人数减1
  9  update dept set population=population-1
 10  where dept.dno=:old.dno;
 11  elsif updating then   --更改一个员工部门时
 12  update dept set population=population+1  --现在的部门人数加1
 13  where dept.dno=:new.dno;
 14  update dept set population=population-1  --使原部门人数减1
 15  where dept.dno=:old.dno;
 16  end if;
 17  end;
 18  /
 
触发器已创建
 
SQL> select * from dept;
 
       DNO DNAME                POPULATION
---------- -------------------- ----------
        11 sale                          0
        12 market                        0
        13 study                         0
 
SQL> insert into emp values (1001,'prajna',11);
 
已创建 1 行。
 
SQL> insert into emp values (1002,'sommer',12);
 
已创建 1 行。
 
SQL> insert into emp values (1003,'huihui',13);
 
已创建 1 行。
 
SQL> insert into emp values (1004,'kankan',12);
 
已创建 1 行。
 
SQL> insert into emp values (1005,'binbin',13);
 
已创建 1 行。
 
SQL> select * from dept;
 
       DNO DNAME                POPULATION
---------- -------------------- ----------
        11 sale                          1
        12 market                        2
        13 study                         2
 
SQL> update emp set dno=12 where ename='binbin';
 
已更新 1 行。
 
SQL> select * from dept;
 
       DNO DNAME                POPULATION
---------- -------------------- ----------
        11 sale                          1
        12 market                        3
        13 study                         1
 
SQL> delete from emp where ename='sommer';
 
已删除 1 行。
 
SQL> select * from dept;
 
       DNO DNAME                POPULATION
---------- -------------------- ----------
        11 sale                          1
        12 market                        2
        13 study                         1