Oracle触发器简单应用示例(销售与库存)

目录

一、应用描述

1、应用场景:

2、具体场景:

二、表结构介绍

1、表名介绍:

2、表结构:

三、设置触发器

四、运行示例

1、初始库存描述

2、有库存情况

2.1 1001号产品售出1件

 2.2 1001号产品库存已减1

3、无库存情况

3.1  1000号产品无库存售1

3.2  1000号产品库存需减1


一、应用描述

1、应用场景:

现有一张库存明细以及销售明细表,销售明细表发生售卖即新增一条销售数据,同时库存相应减少一件;

2、具体场景:

【1】1001号产品售出1件,1001号产品库存减少一件;

【2】1001号产品发生1件退货,即销售-1件,1001号产品库存+1。

二、表结构介绍

1、表名介绍:

库存明细表:e_stock_info

销售明细表:e_sales_info(这里创建的是按日自动分区表)

2、表结构:

库存明细表:e_stock_info
销售明细表:e_sales_info

 建表语句文件:【免费】Oracle触发器销售库存建表语句资源-CSDN文库

三、设置触发器

在应用实际销售场景时,库存由于某些原因有可能会有误差,有可能会出现

1、系统中无库存,但店里实际上还有该商品(入库时少入了一件);

2、系统中有库存,但店铺盘点是缺少了该商品(原因可能性较多);

针对情况1,需要出现提示,但不能干扰正常销售(出现无法出售的情况);

(情况2只能实际店铺盘点时去修正)

CREATE OR REPLACE TRIGGER sales_trigger
BEFORE INSERT
ON e_sales_info  -- 替换为实际的销售记录表名
FOR EACH ROW
DECLARE
  v_prod_id NUMBER;  -- 替换为实际的产品ID列名
  v_quantity_sold NUMBER;  -- 替换为实际的销售数量列名
  v_current_stock NUMBER;
BEGIN
  -- 获取销售记录中的产品ID和销售数量
  v_prod_id := :NEW.prod_id;  -- 假设产品ID列名为prod_id
  v_quantity_sold := :NEW.quantity_sold;  -- 假设销售数量列名为quantity_sold

  -- 获取当前库存数量
  SELECT stock_quantity INTO v_current_stock
  FROM e_stock_info  -- 替换为实际的产品表名
  WHERE prod_id = v_prod_id;

  -- 检查库存是否足够
  IF v_current_stock >= v_quantity_sold THEN
    -- 更新库存数量
    UPDATE e_stock_info
    SET stock_quantity = v_current_stock - v_quantity_sold
    WHERE prod_id = v_prod_id;
     -- 跳出提示
    DBMS_OUTPUT.PUT_LINE('销售成功,库存已更新。');
  ELSE
    -- 更新库存数量
    UPDATE e_stock_info
    SET stock_quantity = v_current_stock - v_quantity_sold
    WHERE prod_id = v_prod_id;
    -- 抛出异常或执行其他操作,表示库存不足
    --RAISE_APPLICATION_ERROR(-20001, '库存不足');
    -- 继续跳出提示
    DBMS_OUTPUT.PUT_LINE('销售成功,请检查库存!');
  END IF;
END;

四、运行示例

1、初始库存描述

1000号产品库存目前为0,1001号产品为10件,1002、1003、1004明细如下图:

初始库存

2、有库存情况

2.1 1001号产品售出1件

售出1件(对应库存需同时减少1件)

1001售出1件

 2.2 1001号产品库存已减1

1001库存减1

3、无库存情况

3.1  1000号产品无库存售1

1000出现实际销售,销售明细加1

1000号产品售1

3.2  1000号产品库存需减1

目前为负,库存异常需关注

1000号产品库存为-1
  • 11
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值