千家信息网

Oracle系列:(30)触发器

发表于:2025-01-20 作者:千家信息网编辑
千家信息网最后更新 2025年01月20日,什么是触发器【Trigger】?不同的DML(select/update/delete/insert)操作,触发器能够进行一定的拦截,符合条件的操作方可操作基表;反之,不可操作基表。类似于JavaWe
千家信息网最后更新 2025年01月20日Oracle系列:(30)触发器


什么是触发器【Trigger】?

不同的DML(select/update/delete/insert)操作,触发器能够进行一定的拦截,符合条件的操作方可操作基表;反之,不可操作基表。类似于JavaWeb中的Filter、Struts2中的Iterceptor。


为什么要用触发器?

如果没有触发器,那么DML所有操作,均可无限制地操作基表,这样一来,不符合业务需求。



创建语句级触发器insertEmpTrigger,当对表【emp】进行增加【insert】操作前【before】,显示"hello world"

create or replace trigger insertEmpTriggerbeforeinserton empbegin   dbms_output.put_line('hello world'); end;/


删除触发器insertEmpTrigger,语法:drop trigger 触发器名

drop trigger insertEmpTrigger;


使用insert语句插入一条记录,引起insertEmpTrigger触发器工作

insert into emp(empno,ename) values(1234,'小明');


使用insert语句插入N条记录,引起insertEmpTrigger触发器工作

insert into emp select * from xxx_emp;


创建语句级触发器deleteEmpTrigger,当对表【emp】进行删除【delete】操作后【after】,显示"world hello"

create or replace trigger deleteEmpTriggerbeforedeleteon empbegin   dbms_output.put_line('删除数据'); end;/


使用delete语句删除一条记录,引起deleteEmpTrigger触发器工作

delete from emp where empno=7369;


使用delete语句删除N条记录,引起deleteEmpTrigger触发器工作

delete from emp where 1=1;

星期一到星期五,且9-20点能向数据库emp表插入数据,否则使用函数抛出异常,

语法:raise_application_error('-20000','例外原因')

create or replace trigger securityTriggerbeforeinserton empdeclare   pday varchar2(20);   phour number(2);begin  select to_char(sysdate,'day') into pday from dual;  select to_char(sysdate,'hh34') into phour from dual;  if pday in ('星期六','星期日') or phour not between 7 and 22 then    raise_application_error('-20000','非工作时间,不能向emp表添加数据');  end if;end;/



创建行级触发器checkSalaryTrigger,涨后工资这一列,确保大于涨前工资,语法:for each row/:new.sal/:old.sal

create or replace trigger checkSalaryTriggerafterupdate of salon empfor each rowbegin   if :new.sal <= :old.sal then     raise_application_error('-20200','工资不能越长越低');   end if;end;/


其中,需要注意的地方

(1)update of sal是对列的更新进行触发

(2)for each row

(3):new和:old代表一行记录

(4)raise_application_error中-20000和-20200之间允许开发者自定义错误



删除触发器,表还在吗?

基表还在;触发器不会进回收站,直接彻底删除


将表丢到回收站,触发器还在吗?

触发器还在


当闪回表后,触发器会在吗?


彻底删除表,触发器会在吗?

原来的触发器也被删除了

新的同样的名字的表,是不是继承原来的触发器的

触发器 语句 数据 星期 工作 工资 语法 回收站 不同 这样一来 一来 一行 业务 之间 代表 函数 原因 名字 地方 开发者 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 霞浦县公安局网络安全大队 天津远程医疗系统软件开发 硬件安全属于网络安全防护吗 从互联网大厂跳槽到北京赛乐科技 网络安全靠人名网络安全 新浪的服务器 穿越火线哪个服务器有手机版 无线网络安全用监控系统 软件开发行业现状2019 软件开发师要考什么大学 网络安全好看手抄报内容 如何从表格中找到数据库 数据库集群部署的好处 连接华为云服务器 美国互联网高科技上市公司 bim软件开发工程考试流程 数据库的数据存储到哪里 网络安全走进军营 网络安全背后的技术支持 centos日志服务器 重庆黔江生鲜电商软件开发 学网络技术和软件工程哪个好 梦幻西游一生一世服务器在哪个区 scm数据库初始化 数据库报错00936 如何访问阿里云服务器内ip地址 只可以启动实例并安装数据库 手机组人渣服务器 网络技术专科好找工作吗 目前国产数据库
0