C/C++教程

初识Oracle 五 (自用) 触发器

本文主要是介绍初识Oracle 五 (自用) 触发器,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

26.触发器
    数据库触发器是一个与表关联的plsql代码段,当特定的数据库语句(insert,delete,update)执行时,Oracle会自动执行触发器里面的代码。

    26.1.触发器可用于:
        数据确认
        实施复杂的安全性检查
        做审计,跟踪表上所做的数据操作
        数据的备份和同步
    
    26.2.类型
        1.语句级:在指定操作语句之前或之后执行一次,不管该语句有多大影响

        2.行级:触发语句对应的每一条记录都会触发,在行级触发器中用old和new作为伪记录变量,识别值的状态。

    26.3.语法:
        create or replace trigger 触发器名
        before/after
        update/insert/delete [of 列名]
        on 表名
        [for each row [when ...]]
        begin 
            plsql代码    
        end 触发器名;

        例:
        简单的触发器:效果:在person表中插入新数据时打印‘要插入新数据了’
        create or replace trigger insertmess
        before insert on person
        begin 
            dbms_output.put_line('要插入新数据了');
        end insertmess;

        例2:效果:读取入职时间(当前时间)的值,如果为休息日则不能插入信息
        create or replace trigger valid_insert_p
        before    insert on person
        declare
            varday varchar2(10);
        begin
            select to_char(sysdate,'day') into varday from dual;
            if varday = 'sunday' then --注:一般这样写(在星期天)然后插入语句时,还是能插入语句,因为to_char输出的字符串会在最后加几个空格,这边有两个解决方法 1.运行一遍select语句直接把输出的复制粘贴到这边写Sunday的地方 2.在varday前加上trim(去空格)函数(个人更倾向于这种方法)
            raise_application_error(-20001,'今天礼拜,不能插入数据');
            end if;
        end valid_insert_p;(可不写触发器名)

        例3.行级触发器
        create or replace trigger triggertest
        before update on person
        begin 
            if :new.sal<=:old.sal then--注:new与':'之间不要有空格,不然会报错
            raise_application_error(-20002,'这不是涨工资,这是降工资!');
            end if;                
        end ;--这里同样可以不写

这篇关于初识Oracle 五 (自用) 触发器的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!