Oracle(触发器&内置程序包)

1、触发器关键词:

trigger

2、概述:是一个特殊的储存过程(看做一个容器中可以限制一些操作)

3.作用:当执行DML(insert,update,delete)语句时,触发器会被自动触发,不能手动调用 4.触发器的使用场景: #(1)可以限制数据的插入 #(2)可以限制数据的修改 #(3)可以限制数据的删除 #(4)重点:a.级联删除(同时删除主表和丛表) b.序列+触发器===》模拟自增长

语法(2322):

2: after before 2个触发器时间点

3: insert | update | delete 3个触发事件

2: 2个触发模式 语句级触发器模式 行级触发器模式

2: 2个伪表 :new : old

# 触发器使用语法(2322):

create or replace trigger 触发器名字

after | before

insert or update or delete on tableName

for each row

begin

(可执行模式,限制数据新增、修改、删除)

end;

===================================================================

例一:

--需求:创建一个触发器,限制学生:康康禁止插入 create or replace trigger t_demo1 after insert on stuInfo for each row begin --限制康康不能插入 if (:new.stuName = 康康) then --错误窗口提示,阻止DML语句运行成功。raise_application_error(状态码,错误信息); 状态码范围: -20000 -20099 raise_application_error(-20001,康康不能插入,有污点); end if; end;

例二:

create or replace trigger t_demo3

after

insert or update or delete on stuInfo

for each row

begin

if inserting then

if(:new.stuName=廖俊杰) then

raise_application_error(-20004,廖俊杰不能新增);

elsif updating then

if(:old.stuName=康康2) then

raise_application_error(-20005,康康2不能删除);

elsif deleting then

if(:old.stuName=梅超风) then

raise_application_error(-20006,梅超风不能修改);

end;

=========================================================================

例一:

--实现功能:利用触发器实现删除主表的数据时,同时将从表的数据删除掉

select * from stuInfo;(主表) select * from stuMarks;(丛表)

create or replace trigger t_demo4 after delete on Stuinfo for each row begin --当触发器被触发时,立刻获取触发器所在表的id 作为条件删除从表的数据 delete from stuMarks where stuMarks.Stuno = :old.stuno; end;

例二: --序列+触发器 模拟标识列

create or replace trigger t_emp

before

insert on new_emp

for each row

begin

--当触发器被触发时。获取到当前序列的下一个值,立即赋值给new_emp新表中的id属性

select s_emp.nextval into :new.empno from dual;

end;

经验分享 程序员 微信小程序 职场和发展