目录
一、应用描述
【1】、应用场景:
【2】、具体场景:
二、表结构介绍
【1】表名介绍:
【2】表结构:
三、设置触发器
一、应用描述
【1】、应用场景:
现有一张库存明细以及销售明细表,销售明细表发生售卖即新增一条销售数据,同时库存相应减少一件;
【2】、具体场景:
【1】1001号产品售出1件,1001号产品库存减少一件;
【2】1001号产品发生1件退货,即销售-1件,1001号产品库存+1。
二、表结构介绍
【1】表名介绍:
库存明细表:e_stock_info
销售明细表:e_sales_info
【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;
ELSE
-- 抛出异常或执行其他操作,表示库存不足
RAISE_APPLICATION_ERROR(-20001, '库存不足');
-- 更新库存数量
UPDATE e_stock_info
SET stock_quantity = v_current_stock - v_quantity_sold
WHERE prod_id = v_prod_id;
END IF;
END;