您当前的位置: 首页 > 学无止境 > 心得笔记 网站首页心得笔记
oracle-触发器
发布时间:2017-11-23 15:03:39编辑:雪饮阅读()
建立所需表及数据:
goods表:
gid商品id,gname商品名称,cnt商品库存
create table goods (
gid number,
gname varchar2(15),
cnt number
);
odr表:
oid:订单id,gid订单所关联的商品id,much购买的商品的数量
create table odr (
oid number,
gid number,
much number
);
insert into goods values (5,'pig',80);
insert into goods values (6,'dog',40);
insert into goods values (7,'cat',30);
触发器(表级触发器)
只能以表为单位,监视insert/update/delete操作,不能精确知道insert/update/delete的行是什么内容的。
create or replace trigger tg1
after insert
on odr
begin
dbms_output.put_line('warn! you have a new order');
end;
测试(下订单)
SQL> insert into odr values (seq1.nextval,5,3);
warn! you have a new order
1 row created.
删除触发器:
SQL> drop trigger tg2
2 /
Trigger dropped.
行级触发器
该触发器可以监听到每行的数据
create or replace trigger tg2
after insert
on odr
for each row
begin
update goods set cnt=cnt-:new.much where gid=:new.gid;
end;
高级触发器(防止库存为0)
create or replace trigger tg3
before insert on odr
for each row
declare
curr number;
begin
select cnt into curr from goods where gid=:new.gid;
if curr < :new.much then
:new.much := curr;
end if;
update goods set cnt=cnt-:new.much where gid=:new.gid;
end;
清空表
SQL> truncate table odr;
Table truncated.
注意:
一个表可以有多个触发器,并且可以效果叠加,为了避免对测试有影响,最好建立触发器前先清除掉之前你对该表所建立过的触发器。
查看当前系统所有触发器: select trigger_name from all_triggers;
关键字词:oracle,触发器
上一篇:oracle-查询语句
下一篇:oracle-存储过程与存储函数