美文网首页
笔记SEVEN

笔记SEVEN

作者: 喵个酱 | 来源:发表于2019-03-14 13:27 被阅读0次

    触发器

    触发器是一个与表关联的pl/sql程序,insert update delete在指定的表上发出时,Oracle会自动执行触发器的相关逻辑。

    1、安全性检查

    2、数据确认

    3、审计功能

    4、数据备份或同步

    create trigger tri_name

    after|before insert|update|delete[of 字段名]

    on table_name

    [for each row]--行级

    begin

    ....

    end;

    /

    第一个触发器(新增一个数据,打印一句“添加了一个员工”)

    create trigger insert_briup_emp

    after insert

    on briup_emp

    begin

        dbms_output.put_line('添加了一个员工');

    end;

    /

    实现日志记录

    create table briup_emp_tag

    (tag varchar2(10),

    time date);

    create trigger briup_emp_log_trigger

    after insert or update or delete

    on briup_emp

    declare

    ptag briup_emp_tag.tag%type;

    begin

        if inserting then ptag:='添加';

        elsif updating then ptag:='修改';

        elsif deleting then ptag:='删除';

    end if;

    insert into briup_emp_tag values(ptag,sysdate);

    end;

    /

    (安全性检查)在非工作时间禁止向员工表中新增员工。

    星期六日和工作日6:00 pm——8:00 am禁止

    create trigger check_data

    before insert

    on briup_emp

    begin

        if to_char(sysdate,'day') in ('星期六','星期日');

        or

        to_number(to_char(sysdate,'hh24'))not between 8 and 12 then

        raise_application_error('-21112','禁止在非工作时间内添加数据');

    end if;

    end;

    /

    数据确认

    create trigger sal_trigger

    before update

    on briup_emp

    for each row

    begin

    if :old.sal >:new.sal then

      raise_application_error(-20002,'涨之前的工资是'||:old.sal||'涨之后的工资是'||:new.sal);

    end if;

    end;

    /

    行级触发器:一条语句都可以触发

    (审计功能)涨完工资以后工资超过6000,就提取他的信息。

    create table briup_emp_info(

    info varchar2(1000)

    );

    create trigger info_trigger

    after update

    on briup_emp

    for each row

    begin

        if:new.sal>6000 then

        insert into briup_emp_info values(:new.ename||'     '||:old.sal||'     '||:new.sal);

        end if;

    end;

    /

    (数据备份或者同步)

    create table briup_emp_bak as select * from briup_emp;

    create trigger bak_trigger

    after update

    on briup_emp

    for each row

    begin

        update briup_emp_bak set sal=:new.sal where empno=:new.empno;

    end;

    /

    相关文章

      网友评论

          本文标题:笔记SEVEN

          本文链接:https://www.haomeiwen.com/subject/dwcqmqtx.html