初识Oracle 五 (自用) 触发器

Oracle触发器是与表关联的PL/SQL代码段,当特定的INSERT、DELETE、UPDATE操作执行时自动触发。主要用途包括数据确认、复杂安全性检查、审计和数据同步。触发器分为语句级和行级,不同类型的触发器有不同的执行时机和特点。例如,行级触发器可以用于在数据更新前后进行条件判断和操作。示例中展示了如何创建触发器以实现特定的业务逻辑,如防止在休息日插入数据或阻止工资降低的操作。
摘要由CSDN通过智能技术生成

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 ;--这里同样可以不写

资料来源:b站最细致的Oracle数据库教程 错过必后悔_哔哩哔哩_bilibili

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值