目录
一、应用描述
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、表结构:
建表语句文件:【免费】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件)
2.2 1001号产品库存已减1
3、无库存情况
3.1 1000号产品无库存售1
1000出现实际销售,销售明细加1
3.2 1000号产品库存需减1
目前为负,库存异常需关注