ORACLE 触发器语法有哪些以及实例分析

2023-04-11 03:37:00 语法 实例 触发器
ORACLE 触发器语法有哪些以及实例分析 ORACLE触发器的语法主要有3种,分别是:BEFORE、AFTER和INSTEAD OF。 BEFORE触发器:在指定的DML操作执行之前触发。 AFTER触发器:在指定的DML操作执行之后触发。 INSTEAD OF触发器:在指定的DML操作执行之前触发。 下面通过一个简单的例子来说明ORACLE触发器的语法: 假设有一张员工表,表结构如下: 员工表 create table emp( empno number(4) not null, ename varchar2(8), job varchar2(10), mgr number(4), hiredate date, sal number(7,2), comm number(7,2), deptno number(2) ); 现在要求在向员工表插入数据时,如果员工编号为1001,则需要同时向部门表插入一条数据,部门表结构如下: 部门表 create table dept( deptno number(2) not null, dname varchar2(14), loc varchar2(13) ); 下面使用BEFORE触发器实现上述要求: 创建BEFORE触发器 create or replace trigger trig_emp_b before insert on emp for each row begin if :new.empno=1001 then insert into dept values(50,'SALES','DALLAS'); end if; end; / 测试 insert into emp values(1001,'SMITH','CLERK',7902,'1980-12-17',800,null,20); 查询部门表 select * from dept; 结果 DEPTNO DNAME LOC ------ ----------------- --------------- 50 SALES DALLAS 可以看到,当向员工表插入1001号员工时,部门表也同时插入了一条数据。 下面使用AFTER触发器实现上述要求: 创建AFTER触发器 create or replace trigger trig_emp_a after insert on emp for each row begin if :new.empno=1001 then insert into dept values(50,'SALES','DALLAS'); end if; end; / 测试 insert into emp values(1001,'SMITH','CLERK',7902,'1980-12-17',800,null,20); 查询部门表 select * from dept; 结果 DEPTNO DNAME LOC ------ ----------------- --------------- 50 SALES DALLAS 可以看到,使用AFTER触发器也能实现上述要求。 下面使用INSTEAD OF触发器实现上述要求: 创建INSTEAD OF触发器 create or replace trigger trig_emp_i instead of insert on emp for each row begin if :new.empno=1001 then insert into dept values(50,'SALES','DALLAS'); end if; end; / 测试 insert into emp values(1001,'SMITH','CLERK',7902,'1980-12-17',800,null,20); 查询部门表 select * from dept; 结果 DEPTNO DNAME LOC ------ ----------------- --------------- 50 SALES DALLAS 可以看到,使用INSTEAD OF触发器也能实现上述要求。

相关文章