• oracle触发器


    oracle触发器

    简介

    ​ 触发器是存储的程序,在发生某些事件时会自动执行或触发。 一般情况发生下面列表的情况而执行

    • DML(增删改)
    • DDL
    • DB OP,logon logoff,startup ,shutdown

    触发器的好处

    • 自动完成某些工作
    • 安全
    • 防止一些无效操作
    • etc

    创建触发器

    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 | 之后| INSTEAD OF} - 指定何时执行触发器。INSTEAD OF子句用于在视图上创建触发器。
    • {INSERT [OR] | 更新[或] | DELETE} - 这指定了DML操作。
    • [OF col_name] - 指定要更新的列名。
    • [ON table_name] - 指定与触发器关联的表的名称。
    • [引用旧的as n n] - 这允许您为各种DML语句引用新值和旧值,例如INSERT,UPDATE和DELETE。
    • [FOR EACH ROW] - 指定行级触发器,即将对受影响的每一行执行触发器。否则,触发器将在执行SQL语句时执行一次,这称为表级触发器。
    • WHEN(条件) - 这为触发器将触发的行提供条件。该子句仅对行级触发器有效。

    eg

    create or replace trigger show_changes
    before delete or insert or update on emps
    for each row
    when(NEW.empno > 0)
    
    declare
    	sal_diff number;
    begin
    	sal_diff := :NEW.sal - :OLD.sal;
    	dbms_output.put_line('old sal:' || :OLD.sal);
    	dbms_output.put_line('new sal:' || :NEW.sal);
    	dbms_output.put_line('diff sal:' || sal_diff);
    end;
    

    效果如下:

  • 相关阅读:
    scss rem 转换函数
    URL Scheme —— 唤端媒介
    extend 对象继承
    [转载]jdk1.8垃圾回收器
    [转载]java高分局之jstat命令使用
    一个用消息队列 的人,不知道为啥用 MQ,这就有点尴尬
    context-param 监听器 过滤器 servlet 拦截器的区别
    springSecurity源码分析——DelegatingFilterProxy类的作用
    Spring Security的核心拦截器
    CAS之TICKET
  • 原文地址:https://www.cnblogs.com/qiudaozhang/p/9510559.html
Copyright © 2020-2023  润新知