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;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值