教学系统设计 网站开发,wordpress加密c酱酱,济南建设工程交易中心,网站图片加载优化触发器的分类#xff1a; 语句级触发器#xff1a;不管影响多少行#xff0c;都只会执行一次 行级触发器#xff1a;影响多少行#xff0c;就触发多少次
一、语句触发器
1、当用户执行了 insert | update | delete 这些操作之后#xff0c;可以触发一系列其他的动作 | …触发器的分类 语句级触发器不管影响多少行都只会执行一次 行级触发器影响多少行就触发多少次
一、语句触发器
1、当用户执行了 insert | update | delete 这些操作之后可以触发一系列其他的动作 | 业务 trigerhandler
作用 在动作执行之前或者之后触发业务处理逻辑 插入数据做一些校验
2、语法
create {or replace} trigger 触发器的名称
before | after
insert | update | delete
on 表名
declare beginend;3、插入员工之后输出一句话
-- 新员工入职之后输出一句话:欢迎加入我们
create or replace trigger tri_test1
after
insert
on emp
declare
begindbms_output.put_line(欢迎加入我们);
end;向emp表上插入
insert into emp(empno,ename) values(9527,XAIOHONG);插入成功
select * from emp;插入成功的同时并且输出了一句话
--数据校验星期五老板不在不能办理新员工入职
--在插入数据之前
--判断当前日期是否是周五
--如果是周五就不能插入信息
create or replace trigger tri_test2
before
insert
on emp
declare -- 声明变量vday varchar2(10);
begin -- 查询当前日期 select trim(to_char(sysdate,day)) into vday from dual; -- 判断当前日期if vday friday thendbms_output.put_line(老板不再不能办理入职);--抛出系统异常raise_application_error(-20001,老板不再不能办理入职);end if;
end;当插入信息的时候
insert into emp(empno,ename) values(9528,XIAOHONG2);二、行级触发器
old 代表旧的记录更新前的记录 new 代表的是新的记录
create {or replace} trigger 触发器的名称
before | after
insert | update | delete
on 表名
[for each row]
declare
begin
end;1、更新所有员工的工资
--更新所有的工资 输出一句话
create or replace trigger tri_test3
after
update
on emp
for each row
declare
begindbms_output.put_line(更新了数据);
end;update emp set sal sal 10;2、判断员工涨工资后工资一定要大于涨工资前的工资
--判断员工涨工资后工资一定要大于涨工资前的工资
/*200 -- 100触发器before旧的工资新的工资如果旧的工资大于新的工资抛出异常不让它执行成功
*/
create or replace trigger tri_updatesal
before
update
on emp
for each row
declarebegin if :old.sal :new.sal thenraise_application_error(-20002,旧的工资不能大于新的工资);end if;
end;update emp set sal 200 where empno 7499;增加数据
update emp set sal sal 10;update emp set sal sal - 10;三、模拟mysql中ID自增长auto_increment
创建一张表
create table person( pid number primary key,pname varchar2(20)
);这里不能向MySQL应用直接插入id为空的值实现不了自增长
insert into person values(null,张三);解决如上问题
使用触发器来解决上述问题
1创建序列create sequence seq_person_pid;
2触发器
create or replace trigger tri_add_person_pid;
before
insert
on person
for each row
declare begindbms_output.put_line(:new.pname);
end;插入数据
insert into person values(null,张三);