zoukankan      html  css  js  c++  java
  • oracle对象之触发器

    触发器的定义就是说某个条件成立的时候,触发器里面所定义的语句就会被自动的执行。因此触发器不需要人为的去调用,也不能调用

    然后,触发器的触发条件其实在你定义的时候就已经设定好了。这里面需要说明一下,触发器可以分为语句级触发器行级触发器

    简单的说就是语句级的触发器可以在某些语句执行前或执行后被触发。而行级触发器则是在定义的了触发的表中的行数据改变时就会被触发一次。

    语法:

    CREATE [OR REPLACE ] TRIGGER trigger_name 
    {BEFORE | AFTER | INSTEAD OF } 
    {INSERT [OR] | UPDATE [OR] | DELETE} 
    [OF col_name] 
    ON table_name 
    [REFERENCING OLD AS o NEW AS n] 
    [FOR EACH ROW] --说明创建的是行级触发器 
    WHEN (condition)  
    DECLARE
       Declaration-statements
    BEGIN 
       Executable-statements
    EXCEPTION
       Exception-handling-statements
    END;

    CREATE [OR REPLACE] TRIGGER trigger_name: 创建或替换现有的触发器:trigger_name

    {BEFORE | AFTER | INSTEAD OF} : 指定触发时间。在INSTEAD OF子句用于在视图中创建触发器

    {INSERT [OR] | UPDATE [OR] | DELETE}: 指定触发事件:指明哪些数据库动作会触发此触发器:

    [OF col_name]: 指定将被更新的列名

    [ON table_name]: 指定触发器相关联的表的名称

    [REFERENCING OLD AS o NEW AS n]: 可以参考新旧值的各种DML语句,如INSERT,UPDATE和DELETE

    :new 行变量:保存事件发生时新数据所在行,只有insert事件和update事件才有新数据。 
    :old 行变量:保存事件发生时旧数据所在行,只有delete事件和update事件才有旧数据。 
    for each row对表的每一行触发器执行一次。如果没有这一选项,则只对整个表执行一次。
    FOR EACH STATEMENT语句级触发

    WHEN (condition): 触发器将触发的条件。此子句仅适用于行级触发器有效


    触发器能实现如下功能:

    自动生成一些派生列值

    实施参照完整性

    事件日志和对表的访问存储信息

    审计

    表的同步复制

    实行安全许可

    防止非法交易

    
    

    SELECT * FROM USER_TRIGGERS;
    --必须以DBA身份登陆才能使用此数据字典
    SELECT * FROM ALL_TRIGGERS;SELECT * FROM DBA_TRIGGERS; 

    --启用和禁用
    ALTER TRIGGER trigger_name DISABLE;
    ALTER TRIGGER trigger_name ENABLE;



  • 相关阅读:
    iTerm2使用技巧
    我的mac下有关php扩展的安装
    xmlhttprequest 1.0和2.0的区别,from qq前端哥
    PHP错误日志记录:display_errors与log_errors的区别
    目前php连接mysql的主要方式
    闭包介绍汇总
    接口设计知识总结
    git命令——从GitHub clone XXX分支,本地创建新分支push到远程仓库
    Spring错误——Junit测试——java.net.BindException: Address already in use: bind
    Java.util.Random生成随机数
  • 原文地址:https://www.cnblogs.com/spdboke/p/6873661.html
Copyright © 2011-2022 走看看