yorknong 发表于 2018-9-26 07:49:05

ORACLE 10G TRIGGER 实例

  一个简单的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 trigger012after delete or insert or update on emp3for each row4begin5if inserting then            --增加一个员工时,使对应部门人数加16update dept set population=population+17where dept.dno=:new.dno;8elsif deleting then       --减少一个员工时,使对应部门人数减19update dept set population=population-1 10where dept.dno=:old.dno; 11elsif updating then   --更改一个员工部门时 12update dept set population=population+1--现在的部门人数加1 13where dept.dno=:new.dno; 14update dept set population=population-1--使原部门人数减1 15where dept.dno=:old.dno; 16end if; 17end; 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
页: [1]
查看完整版本: ORACLE 10G TRIGGER 实例