一个简单的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
转载于:https://blog.51cto.com/mervin/490741