oracle 触发器的使用

Posted 款款就是我

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracle 触发器的使用相关的知识,希望对你有一定的参考价值。

触发器的格式

create or replace trigger   触发器的名字

before [after]    insert[update,delete]

on  作用于哪张表

[for each row]     如果是语句级触发器就不用写,行级触发器要写

declare

begin

end;

 

--触发器的使用场景一 复杂的安全检查
--案例一 禁止在非工作时间添加员工数据
create or replace trigger securityemp
before insert
on emp
declare
begin
if to_char(sysdate,‘day‘)in(‘星期六‘,‘星期日‘) or
to_number(to_char(sysdate,‘hh24‘)) not between 9 and 18 then
raise_application_error(-20001,‘禁止在非工作时间插入新员工‘);
end if;
end;
--测试
insert into emp(ename) values (‘你好‘);
--触发器的使用场景二 数据的确认
--场景 涨后的工作不能少于涨前的工资
create or replace trigger cheaksalary
before update
on emp
for each row
declare
begin
if :new.sal < :old.sal then
raise_application_error(-20002,‘涨后的薪水不能少于涨前的薪水,涨前薪水:‘||:old.sal||‘涨后的薪水:‘||:new.sal);
end if;
end;
--测试
update emp set sal=sal-11 where empno=7788;
--触发器的使用场景三 数据库的审计 基于值的审计
--场景 审计涨后工资超过5000的员工

create table audit_info( --建立一个新的表 用于检验工资超过5000的员工
information varchar2(200)
);

create or replace trigger do_autit_emp_salary
after update
on emp
for each row
declare
begin
if :new.sal>6000 then
insert into audit_info values (:new.deptno||‘ ‘||:new.ename||‘ ‘||:new.sal);
end if;
end;
--检测
update emp set sal=sal+2000;
select *from emp;
select * from audit_info;


--触发器的使用场景四 数据库的备份和同步
--场景 emp1中工资修改后 同步到copy_emp1中

create or replace trigger copy_emp1
after update
on emp1
for each row
declare
begin
update emp_back set sal=:new.sal where empno=:new.empno;
end;

--检测

update emp1 set sal=sal+100 where empno=7788;
select * from emp1 where empno=7788;
select * from emp_back where empno=7788;




























































以上是关于oracle 触发器的使用的主要内容,如果未能解决你的问题,请参考以下文章

oracle触发器使用总结

如何在Oracle触发器中使用查询语句

oracle触发器使用

oracle 数据库的触发器

Oracle 触发器的使用

SQL server与Oracle触发器的创建与使用