暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

oracle触发器

张静懿 2025-03-17
447


一、含义

当用户执行了 insert | update | delete 这些操作之后,可以触发一系列其它的动作、业务逻辑,使用触发器可以协助应用在数据库端确保数据的完整性、日志记录 、数据校验等操作。使用别名 OLD 和 NEW 来引用触发器中发生变化的记录内容,这与其他的数据库是相似的。现在Oracle触发器不仅支持行级触发,还支持语句级触发

二、分类

触发器类型 NEW 和 OLD的使用
INSERT 型触发器 NEW 表示将要或者已经新增的数据
UPDATE 型触发器 OLD 表示修改之前的数据 , NEW 表示将要或已经修改后的数据
DELETE 型触发器 OLD 表示将要或者已经删除的数据
三、语法

1、创建触发器

create trigger 触发器名称
before|after
insert|update|delete
on 表名称
[for each row]--行级触发器
declare
--声明部分
begin
--业务逻辑
end;


2、修改触发器

create [or replace] trigger 触发器名称
before|after
insert|update|delete
on 表名称
[for each row]--行级触发器
declare
--声明部分
begin
--业务逻辑
end;
1
2
3
4
5
6
7
8
9
10
3、删除触发器

drop trigger 触发器名称;
1
四、演示

1、INSERT 型触发器

--新员工入职之后,输出一句话: 欢迎加入我们
create or replace trigger tri_emp_insert
after
insert
on emp
declare

begin
dbms_output.put_line('欢迎加入我们');
end;

--插入数据就可以自动触发触发器
insert into emp(empno, ename) values(9527, '马哈哈');
1
2
3
4
5
6
7
8
9
10
11
12
13
2、UPDATE 型触发器

--判断员工涨工资后的工资一定要大于涨工资前的工资
create or replace trigger tri_emp_update_sal
before
update
on emp
for each row
declare

begin
if :old.sal > :new.sal then
raise_application_error(-20002,'旧的工资不能大于新的工资');
end if;
end;

--更新数据就可以自动触发触发器(无异常)
update emp set sal = sal + 10;
select * from emp;

--更新数据就可以自动触发触发器(有异常)
update emp set sal = sal - 100;
select * from emp;


3、DELETE 型触发器

--老员工离职之后,输出一句话: 有员工离职了
create or replace trigger tri_emp_delete
after
delete
on emp
declare

begin
dbms_output.put_line('有员工离职了');
end;

--删除数据就可以自动触发触发器
delete from emp where empno = 9527;


4、删除触发器

drop trigger tri_emp_insert;
drop trigger tri_emp_update_sal;
drop trigger tri_emp_delete;
————————————————

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原文链接:https://blog.csdn.net/qq_38490457/article/details/107976731

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论