Oracle触发器入门案例

55 篇文章 0 订阅
13 篇文章 0 订阅

触发器

触发器:类似于AOP(面向切面编程)中的拦截器;不能传递参数,输出参数,也不能显示调用,只有满足触发器条件时会由Oracle自动调用。
触发器分类:
语句级触发器;DML操作 insert delete update select
行级触发器;
系统事件触发器;数据库的关闭 启动
用户事件触发器;DDL操作 drop alter create
下边我们以实际例子为根据来操作触发器,相信通过这些操作你回对触发器有一个新的认识。

创建表

建立一个表(或者本来就有表),这是我们可以添加触发器,目的就是方式对数据库中的数据造成我们不想让其发生的(错误)变化。例如:周六日不允许插入数据,非工作时间不得对数据库进行更新。
例如:

create table MYTEST
(id number primary key,
name varchar2(20),
birthday   date,
age    number )
插入数据操作省略。。。。

此时,数据库中有了许多数据。。
下边我们开始按照要求来写触发器。

要求一

要求增加年龄之后不得小于增加之前
步骤如下:
1.打开PL/SQL–>文件—->程序窗口—->Trigger
2.开始书写触发器语句


create or replace trigger checkage
  before  update
  on MYTEST   
  for each row
declare
  -- 如果要声明本地变量,可以在这里书写
begin

  --   if  增加之后的年龄小于增加之前的年龄  then
   --    raise_applicatioin_error(-2001,'错误信息')
  --*/
  --下边的:new  和  :old两个关键字可以根据表中字段来获取表中操作前后的实际数据,以此来判断操作前后数据发生变化的情况。
  if:new.age<:old.age then
  raise_application_error(-20002,'增加之后年龄不能小于增加之前的年龄.增前:'||:old.age||'||增后:'||:new.age);
  end if;
end checkage;

通过F8来编译,如果没错那么则进行监听数据库

要求二

要求周五六日不得插入数据,非上班期间也不得修改数据

实施复杂的安全行检查
禁止在非工作时间对某表进行操作
1.周末 :to_char(sysdae,’day’) in (‘星期六’,’星期日’)
2.上班前,下班后:to_number(to_char(sysdate,’hh24’)) not between 9 and 17

书写触发器语句

create or replace  trigger  security 
before   insert     on   MYTEST
BEGIN 
if to_char(sysdate,'day') in ('星期六',‘星期日’,‘星期五’) or  to_number(to_char(sysdate,'hh24')) not between 9 and 17 then 
raise_application_error(20001,'禁止在非工作时间插入新员工');
end if;
end security;

–security是为触发器起的别名
before insert on MYTEST 意思就是在插入MYTEST表之前进行执行触发器操作
BEGIN 后边开始进行书写触发器的操作。
raise_application_error(20001,’禁止在非工作时间插入新员工’);这是抛出一个例外的书写格式。记住就行
end if; if之后如果后边没有没有内容,切记写上
end security; 这是最后的结束标记他不是固定的二十根据别名来生成的,然后通过按年F8按键进行编译如果没有错误则说明编译成功,进入监视数据库的状态。

总结

如果你对触发器不是太了解,相信看完之后你会有种蓦然回首的感觉。

  • 0
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

uniquewdl

匆忙的人生,总有你喜欢的文章

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值