笔记SEVEN

触发器

触发器是一个与表关联的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)