ORACLE 触发器语法有哪些以及实例分析
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触发器也能实现上述要求。
相关文章