PLSQL入门与精通(第36章:触发器)

从这次开始介绍“数据库的触发器”。
触发器是指以某件事情(活动)为契机,自动启动的程序。
与过程和函数一样,是存储在数据库中的PL/SQL程序,但并不是明确地从程序等中调用,而是始终以某个事件为契机,
在后台自动启动。

触发器的用途相当多,下面是经常使用触发器的场景:
★在订单表上输入订单数据后,库存表中相应商品的库存量需要减少,可以用触发器自动进行UPDATE数据。
★更新某表(UPDATE等)时,有一些CHECK限制,譬如:修安排进行某些检查,若违反该检查,则需要将该表的更新(UPDATE等)设为错误,这时候可以用触发器。
虽然很方便,但频繁使用触发器也有不好的地方:
譬如:由于是自动进行的,用户可能不知道数据是谁什么时候更新的。
还有频繁利用触发器,每次更新都会启动触发器进行其他处理,可能会导致性能劣化。
所以使用触发器要慎重,对于特定的事情很方便的时候再用比较好。
本次针对触发器语法进行简单解释:
例子:对于SOCTT.EMP表,进行INSERT、UPDAATE、DELETE处理,如果在08:00~18:00以外的时间段进行的话就认为是错误的。
触发器例子如下:
<1.触发器的创建示例>
SQL> CREATE OR REPLACE TRIGGER TRIG_EMP_CHECK1
2 BEFORE INSERT OR DELETE OR UPDATE ON SCOTT.EMP
3 DECLARE
4 V_DATE VARCHAR2(5);
5 BEGIN
6 V_DATE := TO_CHAR(SYSDATE,‘HH24:MI’);
7 IF V_DATE BETWEEN ‘08:00’ AND ‘18:00’ THEN
8 NULL;
9 ELSE
10 RAISE APPLICATION ERROR(-2000,“EMP表不能在预定时间外更新”);
11 END IF;
12 END;
13 /
触发器已创建。
<解说>
这里制作了触发器
第1行中,触发名为TRIG_EMP_CHECK1。
第2行,表示针对SOCTT.EMP进行INSERT、UPDATER、DELETE之前,触发该触发器。
从第3行到第12行是无名块。
第6行中获取当前时间
第7行中,检查INSERT、UPDATER、DELETE处理发生时间,是否在08:00~18:00的范围内进行的,
如果超出范围,则在第10行中出错。

<触发器执行例子>
SQL> UPDATE SCOTT.EMP
2 SET SAL = SAL + 10
3 WHERE EMPNO = 7934;

UPDATE SCOTT.EMP
*

  • 第一行发生错误。:
  • ORA-20000:EMP表不能在预定时间外更新
  • ORA-06512: "SCOTT.TRIG_EMP_CHECK1“,* 行8
  • ORA-0808:触发器’SCOTT.TRIG_EMP_CHECK1’运行时发生错误

<解说>
实际执行这个UPDATE文的时间是21:00以后。
针对这个SOCTT.EMP的UPDAATE,启动了触发器TRIG_EMP_CHECK1,
在该触发器中进行了时间段的检查,发生了RAISE APPLICATION ERROR的错误。
只要这个触发器有效,无论用什么方法只要对SCOTT.EMP进行INSERT、UPDAATE、DELETE,
如果时间段是在08:00~18:00的范围外,就一定会出错。

下次详细解释。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值