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

x33g5p2x  于2021-12-24 转载在 其他  
字(1.3k)|赞(0)|评价(0)|浏览(292)

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

相关文章