Oracle触发器简单应用示例

发布时间:2024年01月24日

目录

一、应用描述

【1】、应用场景:

【2】、具体场景:

二、表结构介绍

?【1】表名介绍:

【2】表结构:

三、设置触发器


一、应用描述

【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

三、设置触发器

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;

文章来源:https://blog.csdn.net/qq_39136872/article/details/135827947
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。