|
一个简单的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
|
|
|