博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Oracle触发器
阅读量:5278 次
发布时间:2019-06-14

本文共 1397 字,大约阅读时间需要 4 分钟。

for each row 是针对于行级触发器的,每一行都会执行触发器

第一个触发器:

/*插入一条记录后,自动打印“成功插入一个员工”*/create or replace trigger firstTriggerafter inserton empbegin  dbms_output.put_line('成功插入一个员工');end;/

实例一:实施复杂的安全性检查

/*实施复杂的安全性检查限制非工作时间向数据库插入(emp)数据:周末: to_char(sysdate,'day') in ('星期六','星期日')上班前,下班后:to_number(to_char(sysdate,'hh24')) not between 9 and 18*/create or replace trigger securityEmpbefore inserton empbegin  if to_char(sysdate,'day') in ('星期六','星期日','星期三') or     to_number(to_char(sysdate,'hh24')) not between 9 and 18 then      raise_application_error(-20001,'不能在非工作时间插入数据');       end if;     end;/

RAISE_APPLICATION_ERROR:在子程序内部使用时,能从存储子程序中抛出自定义的错误消息。这样就能将错误报告给应用程序而避免范围未捕获异常。

语法如下:error_number是范围在-20000到-20999之间的负整数

RAISE_APPLICATION_ERROR(error_number, error_message, [keep_errors]); 实例二:确认数据(行级触发器)
/*确认数据(涨后的薪水不能少于涨前的薪水)*/create or replace trigger checksalbefore updateon empfor each rowbegin  if :new.sal < :old.sal then    raise_application_error(-20001,'涨后的薪水不能少于涨前的薪水.涨前:'||:old.sal||' 涨后:'||:new.sal);  end if;end;/
伪记录变量,代表一行,针对行级触发器

 练习:每个部门最多只能有5名员工

create or replace trigger empNumLimitTrigger  before insert on emp2    for each rowdeclare  empCount number:=0;begin   select count(*) into empCount from emp2 where deptno=:new.deptno;    if empCount+1>5 then     raise_application_error(-20001,'每个部门最多只能有五名员工!,添加失败!');   end if;end empNumTrigger;

 

转载于:https://www.cnblogs.com/lihaoyang/p/8676882.html

你可能感兴趣的文章
pycharm connect to mysql
查看>>
59、crontab用法简介
查看>>
在NSMutableArray中添加空元素:NSNull类的使用
查看>>
eclipse(luna)搭建SSH(struts2+spring4+hibernate4)
查看>>
如何建立自己的博客网站
查看>>
2 单例设计模式面试题
查看>>
字符串转为数组
查看>>
Mock制作假数据
查看>>
Scroll的使用
查看>>
Maven学习笔记(一)
查看>>
css布局顺口溜,cs网页设计口诀
查看>>
Maven实战(一)——坐标规划
查看>>
Find Minimum in Rotated Sorted Array
查看>>
crackme itoa atoi 等函数汇编
查看>>
数据库 proc编程三
查看>>
Anaconda多环境多版本python配置指导
查看>>
测试与封装5.2-5.3
查看>>
WEB应用的组成结构
查看>>
bzoj3504[Cqoi2014]危桥
查看>>
Pomelo.AspNetCore.TimedJob 允许依赖注入
查看>>