zoukankan      html  css  js  c++  java
  • Oracle触发器

    ORACLE 触发器
    ORACLE产生数据库触发器的语法为:
    create [or replace] trigger 触发器名 触发时间 触发事件
    on 表名
    [for each row]
    pl/sql 语句
    其中:
    触发器名:触发器对象的名称。由于触发器是数据库自动执行 的,因此该名称只是一个名称,没有实质的用途。
    触发时间:指明触发器何时执行,该值可取:
    before---表示在数据库动作之前触发器执行;
    after---表示在数据库动作之后出发器执行。
    触发事件:指明哪些数据库动作会触发此触发器:
    insert:数据库插入会触发此触发器;
    update:数据库修改会触发此触发器;
    delete:数据库删除会触发此触发器。
    表 名:数据库触发器所在的表。
    for each row:对表的每一行触发器执行一次。如果没有这一选项,则只对整个表执行一次。
    举例:下面的触发器在更新表auths之前触发,目的是不允许在周末修改表:
    create trigger auth_secure
    before insert or update or delete file://对整表更新前触发
    on auths
    begin
    if(to_char(sysdate,'DY')='SUN'
    RAISE_APPLICATION_ERROR(-20600,'不能在周末修改表auths');
    end if;
    end

    SYBASE数据库触发器
    SYBASE数据库触发器的作用与ORACLE非常类似,仅有较小的差异。
    SYBASE产生触发器的语法为:
    CREATE TRIGGER 触发器名
    ON 表名
    FOR INSERT,UPDATE,DELETE
    AS 
    SQL_statement |
    FOR INSERT,UPDATE
    AS
    IF UPDATE(column_name) [AND|OR UPDATE(column_name)]...
    SQL_statements
    上面FOR子句用来指定在触发器上的哪些数据更新命令可激活该触发器。IF UPDATE子句检查对指定列的操作类型,在IF UPDATE子句中可指定多个列。
    与ORACLE不同,对于每条SQL语句,触发器只执行一次。触发器在数据更新语句完成以后立即执行。触发器和启动它的语句被当作一个事务处理,事务可以在触发器中回退。
    下面举例说明SYBASE触发器的写法。
    create trigger forinsert_books
    on books
    for insert
    as
    if(select count(*) from auths,inserted
    where auths.author_code=insert.author_code)!=@@rowcount
    begin
    rollback transaction
    print "books 表中 author_code 列的值在auths 表中不存在。"
    end  

  • 相关阅读:
    形式化描述硬件系统
    形式化表述
    采样定理和采样率和采样电路和采样buf_size_frame_size
    Biology 042: Afterimage Effect
    Algo 33: DFS (Depth First Search in Graph)
    174 Python程序中的进程操作进程间通信(multiprocess.Queue)
    018 Django项目SECRET_KEY等敏感信息保存
    017 nodejs取参四种方法req.body,req.params,req.param,req.body
    173 Python程序中的进程操作进程同步(multiprocess.Lock)
    172 Python程序中的进程操作开启多进程(multiprocess.process)
  • 原文地址:https://www.cnblogs.com/tian2fei/p/3787960.html
Copyright © 2011-2022 走看看