目录

1、什么是触发器?

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

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

功能:自动生成数据

自定义复杂的安全权限

提供审计和日志记录

启用复杂的业务逻辑

4.如何DML触发器?

语法

语法解释:

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 goselect * 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 rowbeginif(:new.stuname='打瞌睡') thenraise_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 rowbeginif(:new.stuname='李文才') thenraise_application_error(-20005,'李文才不能被修改');end if;end;

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

update stuinfo set stuname='李无才' where stuname='李文才'

修改报错

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

create or replace trigger td
after insert or update or delete
on stuinfo
for each rowbegincasewhere inserting thenif(:new.stuname='李文才') thenraise_application_error(-20005,'李文才不能被修改');end if;when updating thenif(:new.stuname='打瞌睡') thenraise_application_error(-20003,'睡觉的人不能增加');end if;when deleting thenif(:new.stuname='李斯文') thenraise_application_error(-20002,'李斯文是校长的儿子');end if;end case;end;

5,联级触发

删除梅超风的时候将他的成绩一并删除

create or replace trigger ta
after delete
on stuinfo
for each rowbeginif(:old.stuname='梅超风')thendelete stumarks where stuno=:old.stuno;end if;end;

6,序列

创建序列

create sequence sc;创建序列sc,序列从0开始select sc.nextval from dual;--查看它的下一个序列  输出1(再次执行会输出2)

为表创建触发器,使其插入数据时序列自动增长

create or replace trigger tb
before insert
on tb_sb
for each rowbegin:new.sid:=sc.nexval;end;insert into tb_sb(sname,sage) values('小宝',18)

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

行级触发是一行调用一次触发器。

语句级触发是将整个代码块执行完毕后调用,只会调用一次

行级触发

create or replace trigger tc
after delete
on stumarks
for each rowbegindbms_oytput.put_line('行级触发');--输出end;

语句级触发

create or replace trigger tc
after delete
on stumarksbegindbms_oytput.put_line('行级触发');--输出end;

删除stuinfo表的数据

delete stumarks

行级触发调用三次

语句级触发调用一次

Oracle 触发器的使用(带案例详解)相关推荐

  1. Unity Steam_VR VRTK开发插件自带案例详解(一)

    原文地址:http://www.52vr.com/article-665-1.html  DEMO 1  查询硬件手柄头显 在VRTK插件 的第一个demo   001_CameraRig_VR_Pl ...

  2. oracle rac 环境配置文件,学习笔记:Oracle RAC spfile参数文件配置案例详解

    天萃荷净 rac中的spfile探讨,记录一下Oracle RAC搭建完成后关于spfile参数文件的配置案例,与更改RAC环境中参数文件的方法 今天朋友的的rac,因为被同事做数据库升级,分别在两个 ...

  3. 创建emp表 oracle,Oracle中创建和管理表详解

    Oracle中创建和管理表详解 更新时间:2013年08月01日 15:44:16   作者: 以下是对Oracle中的创建和管理表进行了详细的分析介绍,需要的朋友可以过来参考下 SQL> /* ...

  4. oracle imp 1403,Oracle中用exp/imp命令参数详解【转】

    Oracle中用exp/imp命令参数详解 [用 exp 数 据 导 出]: 1  将数据库TEST完全导出,用户名system 密码manager 导出到D:daochu.dmp中 expsyste ...

  5. 技术+案例详解无监督学习Autoencoder

    摘要:本篇文章将分享无监督学习Autoencoder的原理知识,然后用MNIST手写数字案例进行对比实验及聚类分析. 本文分享自华为云社区<[Python人工智能] 十五.无监督学习Autoen ...

  6. go mongodb排序查询_Kotlin与MongoDB整合CURD案例详解

    1.mongodb的低版本bson无法转换类型 比如MongoDB数据库表的字段类型为Decimal,实体类用String去定义就会报如下错误 No converter found capablof ...

  7. oracle通过dblink连接mysql配置详解(全Windows下)

    oracle通过dblink连接mysql配置详解(全Windows下) 关于oracle通过dblink连接mysql,经过了两周的空闲时间研究学习,终于配置好了,真是不容易啊,仔细想想的话,其实也 ...

  8. 数据湖架构Hudi(五)Hudi集成Flink案例详解

    五.Hudi集成Flink案例详解 5.1 hudi集成flink flink的下载地址: https://archive.apache.org/dist/flink/ Hudi Supported ...

  9. ALS冰桶挑战案例详解

    [冰桶挑战案例详解](这里写ALS冰桶挑战赛"是美国人创造的一种慈善新玩法,要求参与者在网络上发布自己被冰水浇遍全身的视频内容,然后该参与者便可以要求其他三个朋友来参与这一活动.活动规定,被 ...

最新文章

  1. 如何安装Bit-Z IOS版APP
  2. cudaMemcpy2D介绍
  3. java yyyy m d_日期-Java 8时间API:如何将格式“ MM.yyyy”的字符串解析为LocalD
  4. 工厂设计模式–一种有效的方法
  5. 前端学习(1910)vue之电商管理系统电商系统之完成用户的修改
  6. itext pdf转图片_图片转PDF怎么转换?可以试试这个PDF转换软件
  7. Qt可执行程序写入版本信息
  8. 基于深度学习的信道估计(DL-CE)基础知识
  9. 第九章(二)DAG上的动态规划
  10. python 文字转语音wav_使用Python实现文字转语音并生成wav文件的例子
  11. 代码管理学:域名、产品名、应用名等都不是你能决定的,要上报备案
  12. 原生js实现的日期选择插件
  13. CAD批量输入坐标生成红线
  14. 大学生计算机应用大赛广告设计,计算机应用工程系第四届“经纬在线杯”网页广告设计大赛圆满结束...
  15. magicbook的linux是哪个版本,荣耀MagicBook 2019预装Linux 影响使用吗
  16. Hongda -接小球游戏
  17. 掘金牌鸡汤 - 收藏集 - 掘金
  18. 大数据之ZooKeeper数据类型和节点操作
  19. 联想小新pro16和联想小新pro14 2022款哪个好
  20. 结对开发——求二维环形数组所有子矩阵最大和的问题

热门文章

  1. 软件工程实践第三次作业——结对作业(一)
  2. 计算机什么是符号健,在电脑健盘上怎么打:符号
  3. TokenInsight 对话首席——加密通证期货世界,究竟是投机还是金融工具?
  4. 梳理19年上半年图文记录笔记(ios篇)
  5. 大二java基础期末考试试题,保准看明白!
  6. 利用Android手机破解微信加密数据库EnMicroMsg.db文件
  7. Flutter 1.17版本重磅发布
  8. 气质由内而外 都市白领3个饮食排毒法则
  9. 较全的协同OA系统功能需求
  10. easypoi一对多导入_easypoi导入Excel最佳实践