Oracle(11g)数据库教程之十五:Oracle触发器实例

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

 

 

原创文章 64 获赞 14 访问量 3万+

猜你喜欢

转载自blog.csdn.net/fjqlldg/article/details/105779606