oracle触发器

xiaoxiao2021-02-27  177

--===================================触发器 /* 触发器:监视器,监视表中记录,当对表中记录进行操作(增删改)触发器工作 --行级触发器:for each row 使用:old, :new 语法: create or replace trigger 触发器名称 after|before insert|update|delete on 表名 declare begin   end; */ --添加一条记录后,打印输出“添加记录成功!” create or replace trigger emp_add_after after insert on emp declare begin     dbms_output.put_line('加记录成功');--定义规则 end; --测试 insert into emp(empno,ename) values(9998,'mike'); commit; /* 弹框提示函数: raise_application_error(p1,p2); p1:错误代码 取值范围-20001  到 -20999之间 p2:提示信息 */ --不能给员工降薪 create or replace trigger emp_update_after after update on emp for each row  --行级触发器,通过:old获取操作旧值,:new操作后新值,每一条记录监视 declare begin   --获取到更新之后值,更新之前的值。判断update操作是否给降薪   if :old.sal > :new.sal then     raise_application_error(-20001,'不能给员工降薪');--给错误提示框   end if; end; --测试 update emp set sal = sal -1 where empno = 7369; commit; --不能在非工作日办理入职 create or replace trigger emp_insert_before before insert on emp declare   p varchar2(200); begin   select to_char(sysdate,'day') into p from dual;--规则   if trim(p) in('saturday','sunday') then     raise_application_error(-20002,'不能在非工作日办理入职');--给错误提示框   end if; end; --测试 insert into emp(empno,ename) values(9997,'mike'); commit; --===================触发器应用 /* 实现跟MySQL数据中主键自增效果 insert into emp(ename) values(’zhangsna‘); oracle: insert into emp(empno,ename) values(sequence.nextval,’zhangsna‘); */ --配合序列使用 create sequence seq_emp; create or replace trigger emp_insertRow_before before insert on emp for each row declare begin   select seq_emp.nextval into :new.empno from dual; --给将要添加记录,从某个序列中查询到一个值----设置主键值 end; --测试 insert into emp(ename) values('jack1'); commit;
转载请注明原文地址: https://www.6miu.com/read-12594.html

最新回复(0)