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

news2025/1/11 8:57:34

目录

一、应用描述

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1412541.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Contest3388 - 2024寒假集训-排位赛竞 赛(二)-补题(A-M)

问题 A: 三五倍数(问题 A: 三五倍数 - BUCTOJ) 思路&#xff1a;这题就暴力&#xff0c;注意一下是小于1000&#xff0c;别取到1000就行。 #include<bits/stdc.h> using namespace std; int main() {int sum0;for(int i3;i<1000;i){if(i%30||i%50) sumi;}cout<<…

线性代数基础【6】二次型

第一节、二次型的基本概念及其标准型 一、基本概念 ①二次型 含n个变量x1,x2,…,xn,且每项都是2次的齐次多项式 ②标准二次型 只含有平方项不含交叉项的二次型称为标准二次型 ③二次型的标准化 设f(X)X^TAX 为一个二次型,经过可逆的线性变换XPY(即P为可逆矩阵)把二次型…

android camera系列(Camera1、Camera2、CameraX)的使用以及输出的图像格式

一、Camera 1.1、结合SurfaceView实现预览 1.1.1、布局 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.android.com/apk/res/android"xmlns:app"http://schemas.android.com/apk/res-au…

网络防御保护-- 防火墙NAT实验

一、实验拓扑 本实验是在防火墙接口配置实验上&#xff0c;增加几台设备。其防火墙接口配置实验的设备配置已略&#xff0c;详细请看防火墙接口配置实验。 二、实验要求 1、生产区在工作时间&#xff08;9&#xff1a;00---18&#xff1a;00&#xff09;内可以访问服务区&…

Hadoop3.x源码解析

文章目录 一、RPC通信原理解析1、概要2、代码demo 二、NameNode启动源码解析1、概述2、启动9870端口服务3、加载镜像文件和编辑日志4、初始化NN的RPC服务端5、NN启动资源检查6、NN对心跳超时判断7、安全模式 三、DataNode启动源码解析1、概述2、初始化DataXceiverServer3、初始…

day3C++

设计一个Per类&#xff0c;类中包含私有成员:姓名、年龄、指针成员身高、体重&#xff0c;再设计一个Stu类&#xff0c;类中包含私有成员:成绩、Per类对象p1&#xff0c;设计这两个类的构造函数、析构函数和拷贝构造函数。 #include <iostream>using namespace std;clas…

Oracle篇—分区表和分区索引的介绍和分类(第一篇,总共五篇)

☘️博主介绍☘️&#xff1a; ✨又是一天没白过&#xff0c;我是奈斯&#xff0c;DBA一名✨ ✌✌️擅长Oracle、MySQL、SQLserver、Linux&#xff0c;也在积极的扩展IT方向的其他知识面✌✌️ ❣️❣️❣️大佬们都喜欢静静的看文章&#xff0c;并且也会默默的点赞收藏加关注❣…

前端canvas项目实战——简历制作网站(二)——右侧属性栏(颜色)

目录 前言一、效果展示二、实现步骤1. 实现一个自定义的选色板2. 创建属性工厂&#xff0c;为每个对象定制属性3. 为canvas对象注册监听器&#xff0c;点击不同对象时更新属性列表 三、Show u the code后记 前言 上一篇博文中&#xff0c;我们实现了左侧工具栏&#xff0c;通过…

数字安全网:深入解析服务容错的三大绝招“

欢迎来到我的博客&#xff0c;代码的世界里&#xff0c;每一行都是一个故事 数字安全网&#xff1a;深入解析服务容错的三大绝招" 前言什么是服务雪崩降级&#xff1a;优雅的后退熔断&#xff1a;保卫系统的守护者流量整形&#xff1a;平衡与优化 前言 想象一下&#xff…

【java】常见的面试问题

目录 一、异常 1、 throw 和 throws 的区别&#xff1f; 2、 final、finally、finalize 有什么区别&#xff1f; 3、try-catch-finally 中哪个部分可以省略&#xff1f; 4、try-catch-finally 中&#xff0c;如果 catch 中 return 了&#xff0c;finally 还会执行吗&#…

Tosei 自助网络店铺管理系统network_test.php_RCE漏洞复现

简介 Tosei 自助洗衣机是日本一家公司的产品,在 network_test.php 文件存在命令执行 漏洞复现 FOFA语法: body="tosei_login_check.php" 主要是日本 访问界面如下所示: 验证POC: /cgi-bin/network_test.php 拼接访问url: https://ip:port/cgi-bin/network_tes…

(四)ros中ros::init(argc,argv,”节点名称”)。中的节点名称和launch文件中的节点名称关系。

1、使用rosrun 命令执行ros程序: Rosrun <功能包名称> <节点名称>。其中”节点名称”为ros::init中的ros节点名称。 2、使用launch 文件 name 参数为ros节点名称。 如果采样launch启动ros程序&#xff0c;launch文件中的ros节点名称会替换ros::init中的节点名称…

深入理解sysbench工具

文章目录 一、概述二、安装2.1、源码编译安装2.2、命令行安装2.3、安装确认 三、重要参数详解3.1、查询支持的参数3.2、重要参数说明 四、实例4.1、CPU性能测试4.2、内存性能测试4.3、IO性能测试4.4、POSIX线程性能测试4.5、多线程调度测试 团队博客: 汽车电子社区 一、概述 sy…

华为路由器IPv6基础配置

1. R2的两个接口均采用静态IPv6地址配置方法 2. R1的GigabitEthernet0/0/3接口采用无状态 地址配置 3. R3的GigabitEthernet0/0/3接口采用DHCPv6 的方式配置IPv6地址 R1配置 ipv6 #全局使能IPv6 interface GigabitEthernet0/0/0ipv6 enable ipv6 address auto link-local #为…

学习JavaEE的日子 Day17 面向对象版学生管理系统

Day17 面向对象版学生管理系统 代码已放在资源里&#xff0c;有需要可自取&#xff01;&#xff01;&#xff01; 1.需求分析 管理的是一个一个的学生对象 学生类&#xff1a; public class Student{String name&#xff1b;char sex;int age;String classId;//班级号String …

1.26 day3 C++

设计一个Per类&#xff0c;类中包含私有成员:姓名、年龄、指针成员身高、体重&#xff0c;再设计一个Stu类&#xff0c;类中包含私有成员:成绩、Per类对象p1&#xff0c;设计这两个类的构造函数、析构函数和拷贝构造函数。 #include <iostream>using namespace std; cla…

大文件传输之以太网UDP传输延迟解决方案

在数字化浪潮席卷全球的今天&#xff0c;数据已成为企业最宝贵的资产之一。随着企业规模的扩大和业务的全球化&#xff0c;大文件传输的需求日益增长&#xff0c;它不仅关系到企业内部数据的高效管理&#xff0c;也是与外部合作伙伴进行有效沟通的关键。然而&#xff0c;大文件…

aardio - 调用C编写的dll时的不同参数类型处理方法

import console; //生成 DLL import tcc; var c tcc(); c.code /** #include <stdio.h> #include <stdlib.h> #include <stdbool.h>#ifdef __cplusplus #define EXTERN_C extern "C" __declspec(dllexport) #else #define EXTERN_C __declsp…

23111 C++ day3

思维导图 设计一个Per类&#xff0c;类中包含私有成员:姓名、年龄、指针成员身高、体重&#xff0c;再设计一个Stu类&#xff0c;类中包含私有成员:成绩、Per类对象p1&#xff0c;设计这两个类的构造函数、析构函数和拷贝构造函数。 #include <iostream>using namespac…

零基础学编程工具简介,中文编程开发工具

零基础学编程工具简介&#xff0c;中文编程开发工具 一、前言 零基础自学编程&#xff0c;中文编程工具下载&#xff0c;中文编程工具构件之扩展系统菜单构件教程 编程系统化教程链接https://jywxz.blog.csdn.net/article/details/134073098?spm1001.2014.3001.5502 给大家…