Oracle 触发器的使用(带案例详解)

语法

语法解释:

5,案例DML触发器

建表插数据

1,要求李斯文不能被删除

2,要求’打瞌睡’的不能被增加

4,三合一  insert update delete 要把前面的触发器删掉再运行

5,联级触发

6,序列

7,行级触发与语句级触发的区别


1、什么是触发器?


触发器是当特定事件出现时自动执行的存储过程(PL/SQL块),不能接受参数,不能被显式调用(即不能手动调用)

特定事件可以是执行更新的DML语句和DDL语句

注:DML数据的定义语言 DDL 数据操作语言TCL事务控制语言 DCL数据控制语言

2、触发器的类型有哪些?

============

(1)DML触发器

(2)替代触发器(instead of触发器)

(3)系统事件触发器

3,触发器的功能是什么?

============

为了方便数据库备份

Oracle数据库没有序列,通过触发器实现自动增长

功能:自动生成数据

自定义复杂的安全权限

提供审计和日志记录

启用复杂的业务逻辑

4.如何DML触发器?

===========

语法

语法:

create [or replace] trigger trigger_name

{before | after} trigger_event

on table_name

[for each row]

[when trigger_condition]

trigger_body

语法解释:

trigger_name:触发器名称

before | after : 指定触发器是在触发事件发生之前触发还暗示发生之后触发

trigger_event:触发事件,在DML触发器中主要为insert、update、delete等

table_name:表名,表示发生触发器作用的对象

for each row:指定创建的是行级触发器,若没有该子句则创建的是语句级触发器

when trigger_condition:添加的触发条件

trigger_body:触发体,是标准的PL/SQL语句块

**2:两个时间点  after before   除了使用序列+触发器实现自动增长为前触发,一般都是后触发

2:两个临时表:   :old  老表     :new  新表

2:两种执行模式  行级触发for each row   语句级触发

3:三种操作: insert update delete**

5,案例DML触发器

==========

建表插数据

–创建学生信息表

create table stuInfo

(

stuNo varchar2(6),

stuName varchar2(10),

stuSex varchar2(2),

stuAge int,

stuSeat int,

strAddress varchar2(255)

)

go

–创建学生成绩表

create table stuMarks

(

ExamNo varchar2(7),

stuNo varchar2(6),

writtenExam int,

LabExam int

)

go

–往学生信息表内插入测试数据

insert into stuInfo(stuNo, stuName, stuSex, stuAge,stuSeat,strAddress)

select ‘s25301’, ‘张秋丽’, ‘男’, 18,1, ‘北京海淀’ from dual union

select ‘s25303’, ‘李斯文’, ‘女’, 22,2, ‘河阳洛阳’ from dual union

select ‘s25302’, ‘李文才’, ‘男’, 85,3, ‘地址不详’ from dual union

select ‘s25304’, ‘欧阳俊雄’, ‘男’, 28,4, ‘新疆’ from dual union

select ‘s25318’, ‘梅超风’, ‘女’, 23,5, ‘地址不详’ from dual

go

–往学生成绩表内插入测试数据

insert into stuMarks(ExamNo, stuNo, writtenExam, LabExam)

select ‘s271811’, ‘s25303’, 93, 59 from dual union

select ‘s271813’, ‘s25302’, 63, 91 from dual union

select ‘s271816’, ‘s25301’, 90, 83 from dual union

select ‘s271817’, ‘s25318’, 63, 53 from dual

go

select * from stuInfo

select * from stuMarks

1,要求李斯文不能被删除

create or replace trigger ta --创建触发器名称

after delete --时间点 操作

on stuinfo --操作的表

for each row --行级触发

begin

if(:old.syuname=‘李斯文’) then

raise_application_error(-20002,‘李斯文是校长的儿子’)

end if;

end;

注:

old是临时表,和stuinfo中的数据一致

Oracle提供了1000个错误代码给我们-21000到-20000

删除李斯文的信息

delete stuinfo where stuname=‘李斯文’

执行删除会触发触发器然后报错

2,要求’打瞌睡’的不能被增加

create or replace trigger tb

after insert

on stuinfo

for each row

begin

if(:new.stuname=‘打瞌睡’) then

raise_application_error(-20003,‘睡觉的人不能增加’);

end if;

end;

增加打瞌睡的学生信息

insert into stuinfo values(‘s34345’,‘瞌睡’,‘女’,18,6,‘长沙’)

增加执行报错

3,要求李文才不能被修改

create or replace trigger tc

after update

on stuinfo

for each row

begin

if(:new.stuname=‘李文才’) then

raise_application_error(-20005,‘李文才不能被修改’);

end if;

end;

修改李文才的姓名为李无才

update stuinfo set stuname=‘李无才’ where stuname=‘李文才’

修改报错

4,三合一  insert update delete 要把前面的触发器删掉再运行

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:前端)

最后

javascript是前端必要掌握的真正算得上是编程语言的语言,学会灵活运用javascript,将对以后学习工作有非常大的帮助。掌握它最重要的首先是学习好基础知识,而后通过不断的实战来提升我们的编程技巧和逻辑思维。这一块学习是持续的,直到我们真正掌握它并且能够灵活运用它。如果最开始学习一两遍之后,发现暂时没有提升的空间,我们可以暂时放一放。继续下面的学习,javascript贯穿我们前端工作中,在之后的学习实现里也会遇到和锻炼到。真正学习起来并不难理解,关键是灵活运用。

资料领取方式:点击这里获取前端全套学习资料

css源码pdf

JavaScript知识点
“https://i-blog.csdnimg.cn/blog_migrate/55c5c957464c57e8244881cab182aaa0.jpeg” />

最后

javascript是前端必要掌握的真正算得上是编程语言的语言,学会灵活运用javascript,将对以后学习工作有非常大的帮助。掌握它最重要的首先是学习好基础知识,而后通过不断的实战来提升我们的编程技巧和逻辑思维。这一块学习是持续的,直到我们真正掌握它并且能够灵活运用它。如果最开始学习一两遍之后,发现暂时没有提升的空间,我们可以暂时放一放。继续下面的学习,javascript贯穿我们前端工作中,在之后的学习实现里也会遇到和锻炼到。真正学习起来并不难理解,关键是灵活运用。

资料领取方式:点击这里获取前端全套学习资料

[外链图片转存中…(img-BkhRgwcv-1712469166851)]

[外链图片转存中…(img-tGdEysIS-1712469166851)]

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值