Oracle(11g)数据库教程之十五:Oracle触发器实例
准备工作:
先启动Oracle,连接数据库
建立两个表:Goods(商品表)、Orders(订单表)
Goods(商品表)
create table Goods
(
gid char(8) not null primary key, --商品编号
name varchar(10), --商品名
price decimal(8,2), --价格
num int --数量
);
Orders(订单表)
create table Orders
(
gid char(10) not null, --商品号
name varchar(10), --商品名
price decimal(8,2), --价格
onum int , --订单数量
otime date --订单时间
);
在商品表中导入商品
insert into Goods values('A0001', '橡皮', 2.5, 100);
insert into Goods values('B0001','小楷本', 2.8, 210);
insert into Goods values('C0001','铅笔', 1.2, 120);
insert into Goods values('D0001','计算器', 28, 20);
任务一、建立触发器,订单表中增加订单数量后,商品表商品数量同步减少对应的商品订单出数量
create trigger tri_insert_orders after insert on orders for each row
declare
pragma autonomous_transaction;
begin
update goods set num = num-:new.onum where gid = :new.gid;
commit;
end;
验证:
在订单表插入订单,查看商品表相对应商品的数量(原来数量为100)
任务二、建立触发器,实现功能:客户取消订单,恢复商品表对应商品的数量
create trigger tri_cancle_orders after delete on orders for each row
declare
pragma autonomous_transaction;
begin
update goods set num= num+:old.onum where gid = :old.gid;
commit;
end;
验证:在订单表中删除订单,查看商品表中商品数量
任务三、建立触发器,实现功能:客户修改订单,商品表对应商品数量同步更新
create trigger tri_update_orders after update on orders for each row
declare
pragma autonomous_transaction;
begin
update goods set num= num+(:old.onum-:new.onum) where gid = :old.gid;
commit;
end;
验证:
开始,‘A0001’订单数为51,后改为72,查看商品表对应商品数量
任务四、建立触发器,实现功能:对于所下订单,进行判断,如果订单的数量>库存数量,就认为是恶意订单,给出警示语句。
验证:计算器库存为20,商品号:D0001