PL/SQL触发器的应用(慕课网总结)

如果语句报错,可以使用下列语句查出error信息:
--查看对象信息
select * from dba_objects where object_name='DO_AUDIT_EMP_SAL';
--查看create trigger error信息
select * from user_errors where type = 'TRIGGER' and name = 'DO_AUDIT_EMP_SAL';--trigger name

--触发器的应用
--引用的例子分别是1.语句级触发器,2.行级触发器,3.行级触发器
-- !!!!!!raise_application_error触发之后不显示!!!!!!!!
格式:

create or replace trigger 触发器名
before/after insert/delete/update [of 列名]
on 表名
for each row when[条件]


PL/SQL BLOCK
--1.实施复杂的安全性检查:禁止非工作时间插入表emp
--to_char(sysdate,'day') in ('saturday','sunday')
--to_number(to_char(sysdate,'hh24')) not between 9 and 18
create or replace trigger securityemp
before insert
on emp
begin
if to_char(sysdate,'day') in ('saturday','sunday') or
to_number(to_char(sysdate,'hh24')) not between 9 and 15
raise_application_error(-20001,'禁止在非工作时间插入新员工');
end if;
end;
/
--2.数据的确认:涨工资不能少,(伪列变量:new,:old)
--:old :new代表同一条记录,:old这一行操作之前的值,:new操作之后的值
create or replace trigger checksalary
before update
on emp
for each row
begin
if :old.sal>:new.sal then
raise_application_error(-20002,'涨后的薪水不能少于涨后的薪水,涨后的薪水:'||:new.sal||'涨前的薪水:'||:new.sal);
end if;
end;
/
--3.数据库的审计:基于值的审计功能
--给员工涨工资,当涨后的薪水超过6k,审计该员工的信息
--先建表,后建触发器
create or replace trigger do_audit_emp_sal
after update
on emp
for each row
begin
if :new.sal>6000 then
insert into autdit_info values(:new.empno||','||:new.ename||','||:new.sal);
end if;
end;
/
--4.数据库的备份和同步功能:
--当给员工涨完工资以后,自动备份新的工资到备份表中
create or replace trigger sync_salary
after update
on emp
for each row
begin
update emp_bak set sal=:new.sal where empno=:new.empno;
end;
/

 

posted on 2017-02-08 09:50  EchoLong333  阅读(264)  评论(0编辑  收藏  举报

导航