PLSQL学习之触发器

触发器

在PLSQL中也有个类似与我们Java Web中过滤器的概念,就是触发器...触发器的思想和Filter的思想几乎是一样的....

 

值得注意的是:对于触发器而言,是不针对查询操作的。也就是说:触发器只针对删除、修改、插入操作!

触发器语法


   CREATE  [or REPLACE] TRIGGER  触发器名
   {BEFORE | AFTER}
   { INSERT | DELETE|-----语句级
      UPDATE OF 列名}----行级
   ON  表名

    -- 遍历每一行记录
   [FOR EACH ROW]
   PLSQL 块【declare…begin…end;/】

 

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


CREATE OR REPLACE TRIGGER insertempTiriger
BEFORE
INSERT
  ON EMP
  BEGIN
    dbms_output.put_line('helloword');

  END;

调用:


INSERT INTO EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO) VALUES (1, '2', '3', 4, NULL, NULL, NULL, 10);

 


星期一到星期五,且9-20点能向数据库emp表插入数据,否则使用函数抛出异常,
语法:raise_application_error('-20000','例外原因')


CREATE OR REPLACE TRIGGER securityTrigger
BEFORE
INSERT
  ON EMP
  DECLARE
    pday  VARCHAR2(10);
    ptime NUMBER;
  BEGIN
    /*得到星期几*/
    SELECT to_char(sysdate, 'day')
    INTO pday
    FROM dual;

    /*得到时间*/
    SELECT to_char(sysdate, 'hh24')
    INTO ptime
    FROM dual;

    IF pday IN ('星期六', '星期日') OR ptime NOT BETWEEN 7 AND 23
    THEN
      RAISE_APPLICATION_ERROR('-20000', '非工作事件,请工作时间再来!');

    END IF;

  END;

插入数据、响应触发器:


INSERT INTO EMP (EMPNO, ENAME, JOB, MGR, HIREDATE, SAL, COMM, DEPTNO) VALUES (3, '2', '3', 4, NULL, NULL, NULL, 10);

 


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

可以使用:new.sal/:old.sal来对比插入之前的值和插入之后的值


CREATE OR REPLACE TRIGGER checkSalTrigger
BEFORE
UPDATE OF sal
  ON EMP
FOR EACH ROW
  BEGIN
    IF :new.sal <= :old.sal
    THEN
      RAISE_APPLICATION_ERROR('-20001', '你涨的工资也太少了把!!!!');

    END IF;

  END;

调用:


UPDATE emp
SET sal = sal - 1
WHERE empno = 7369;


作者:Java3y
链接:http://www.imooc.com/article/25261
来源:慕课网
本文原创发布于慕课网 ,转载请注明出处,谢谢合作

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值