zoukankan      html  css  js  c++  java
  • PL/SQL第三课(学习笔记)

    TRIGGER触发器
    1、TRIGGER与过程/函数类似
        都是带有名字的执行块
        都有声明,执行体和异常处理部分
    2、TRIGGER与过程/函数的差别
        TRIGGER必须存储在数据库中
        对于过程和函数必须显示地由另一个运行块调用。对于TRIGGER,是由触发事件自动激发。触发事件是在数据库表上执行的DML(INSERT ,UPDATE , DELETE) 数据操作。

    创建TRIGGER
    1、语法
    CREATE [OR REPLACE] TRIGGER trigger_name
    {BEFORE|AFTER}triggering_event ON table_reference
    [FOR EACH ROW [WHEN trigger_condition]]
    trigger_body;
    2必须的部分
    触发器名:trigger_name;
    触发事件:triggering_event;
    触发器主体:trigger_body
    3、可选部分
    WHEN 子句

    例子:
    --AFTER
    CREATE OR REPLACE TRIGGER trg_emp
        AFTER INSERT OR UPDATE OR DELETE ON s_emp
    DECLARE
        v_cnt NUMBER;
    BEGIN
        SELECT COUNT(*) INTO v_cnt
         FROM s_emp
        DBMS_OUTPUT.PUT_LINE(v_cnt||' rows in s_emp');
    END
    --BEFORE
    CREATE OR REPLACE TRIGGER trg_emp
        BEFORE INSERT OR UPDATE OR DELETE ON s_emp
    BEGIN
        DBMS_OUTPUT.PUT_LINE('this trigger is before ...');
    END

    触发器激发的顺序
    1、如果存在,执行语句级别之前的触发器
    2、对于受语句影响的每一行:
        语句存在,执行级别之前的触发器
        执行语句本身,
        如果存在,执行行级别之后的触发器
    3、如果存在,执行语句级别之后的触发器。

    触发器的限制
    1、触发器的主体是PL/SQL语句块
    2、所有能出现在PL/SQL块中的语句在触发器主体中都是合法的限制
        不应该使用事务控制语句COMMIT,ROOLBACK ,SAVEPOINT
        由触发器调用的任何过程于函数都不能使用事务控制语句
        不能声明任何LONG或LONG RAW变量
        可以访问的表有限
  • 相关阅读:
    常见问题:bootstrap datepicker日期插件汉化
    好的插件
    问题11:web前端开发规范手册(转)
    问题10:获取当前页面宽度JS
    SQL学习1:基础
    问题9:tabtle 整理
    Exception in thread "RMI TCP Connection(idle)" java.lang.OutOfMemoryError: PermGen space
    测试markdown 博客功能
    Cannot generate SSPI context
    Ubuntu 13 Zookeeper 集群配置
  • 原文地址:https://www.cnblogs.com/itgmhujia/p/1268354.html
Copyright © 2011-2022 走看看