【Mysql】——销售业务的实现

💻博主现有专栏:

                C51单片机(STC89C516),c语言,c++,离散数学,算法设计与分析,数据结构,Python,Java基础,MySQL,linux,基于HTML5的网页设计及应用,Rust(官方文档重点总结),jQuery,前端vue.js,Javaweb开发,设计模式、Python机器学习等
🥏主页链接:

                Y小夜-CSDN博客

目录

🎯把字符串'1,1,2,2,3,3,4,1,'还原为表,写出存储过程

🎯实现销售过程的存储过程


🎯把字符串'1,1,2,2,3,3,4,1,'还原为表,写出存储过程

(注意该字符串两个数字为一组,前者代表gid(货品id),后者代表xssl(销售数量))

DELIMITER $$

USE `xiaoshou`$$

DROP PROCEDURE IF EXISTS `xsjlcp`$$

CREATE DEFINER=`root`@`localhost` PROCEDURE `xsjlcp`(xsmx VARCHAR(1000))
BEGIN
	    DROP TABLE IF EXISTS lsb;
	CREATE TEMPORARY TABLE lsb (gid INT,xssl NUMERIC(18,3));
	WHILE(xsmx<>'') DO
		SET @k=POSITION(',' IN xsmx);
		SET @gid=LEFT(xsmx,@k-1);
		SET xsmx=SUBSTR(xsmx,@k+1);
		SET @k=POSITION(',' IN xsmx);
		SET @xssl=LEFT(xsmx,@k-1);
		SELECT @xssl;
		INSERT INTO lsb VALUES(@gid,@xssl);
		SET xsmx=SUBSTR(xsmx,@k+1);
	END WHILE;
	SELECT *FROM lsb;
	SELECT barcode,gname,unit,retail_Price promotional_Price,xssl,xssl*promotional_Price
	 AS 金额 FROM goods,lsb WHERE goods.`gid`=lsb.gid;
    END$$

DELIMITER ;

        这是一个MySQL存储过程,名为xsjlcp,接受一个参数xsmx,该参数是一个包含多个逗号分隔的字符串。存储过程的主要功能是创建一个临时表lsb,将xsmx中的每个逗号分隔的值插入到lsb表中,然后从goods表中查询与lsb表中的gid匹配的商品信息,并计算金额。

以下是存储过程的解析:

  1. 删除已存在的lsb表(如果存在)。
  2. 创建一个临时表lsb,包含两个字段:gid(整数类型)和xssl(数值类型,保留3位小数)。
  3. 使用WHILE循环处理xsmx中的每个逗号分隔的值。
  4. 在每次循环中,将xsmx中的前两个逗号分隔的值分别赋给变量@gid@xssl
  5. @gid@xssl插入到lsb表中。
  6. 更新xsmx,去掉已经处理过的部分。
  7. xsmx为空时,结束循环。
  8. 查询lsb表中的所有数据。
  9. 查询goods表和lsb表的连接结果,包括商品条形码、商品名称、单位、零售价、促销价、销售数量和金额(销售数量乘以促销价)。

🎯实现销售过程的存储过程

DELIMITER $$

CREATE

    PROCEDURE `xiaoshou`.`XSjlcp_new`(cashierid INT,uid INT,payment TINYINT,xsmx VARCHAR(8000))

    BEGIN
	DROP TABLE IF EXISTS lsb;
	CREATE TEMPORARY TABLE lsb(gid INT,xssl NUMERIC(18,3));
	WHILE(xsmx<>'') DO
		SET @k=POSITION(',' IN xsmx);
		SET @gid = LEFT(xsmx,@k-1);
		SET xsmx=SUBSTR(xsmx,@k+1);
		SET @k=POSITION(',' IN xsmx);
		SET @xssl = LEFT(xsmx,@k-1);
		INSERT INTO lsb VALUES(@gid,@xssl);
		SET xsmx = SUBSTR(xsmx,@k+1);
	END WHILE;
	SELECT SUM(xssl*retail_Price) INTO @amount_money 
	FROM goods,lsb WHERE goods.gid=lsb.gid;
	SELECT SUM(xssl*promotional_Price) INTO @actual_money 
	FROM goods,lsb WHERE goods.gid=lsb.gid;
	SET @discount_money=@amount_money-@actual_money;
	/*插入收银记录表*/
	INSERT INTO `cashaccount`(cashierid,uid,payment,amount_money,actual_money,discount_money)
	VALUES(cashierid,uid,payment,@amount_money,@actual_money,@discount_money);
	
	/*销售明细表*/
	INSERT INTO `cashaccount_detail`(cashaccountid,gid,salesquantity,retailprice,promotionalprice)
	SELECT @@identity,lsb.gid,xssl,retail_Price,promotional_Price FROM lsb,goods WHERE lsb.gid = goods.`gid`;
	
	/*货物库存表*/
	DROP TABLE IF EXISTS lsb1;
	CREATE TEMPORARY TABLE lsb1(gid INT,xssl NUMERIC(18,3));
	INSERT INTO lsb1(gid,xssl) SELECT gid,SUM(xssl) FROM lsb GROUP BY gid;
	UPDATE stock b1,lsb1 b2 SET b1.quantity=b1.quantity-b2.xssl WHERE b1.gid = b2.gid;
	/*用户表*/
	IF uid>=10000 THEN
		UPDATE `user` SET card_balance = card_balance-@actual_money,points = points+FLOOR(@actual_money)
		WHERE `user`.uid = uid;
	END IF;
    END$$

DELIMITER ;

        这是一个MySQL存储过程,名为`XSjlcp_new`,用于处理销售记录。它接收四个参数:收银员ID(cashierid)、用户ID(uid)、支付方式(payment)和销售明细(xsmx)。

1. 首先,它创建一个临时表lsb,用于存储商品ID(gid)和销售数量(xssl)。
2. 然后,它遍历销售明细(xsmx),将商品ID和销售数量插入到lsb表中。
3. 接下来,它计算总金额(@amount_money)和实际金额(@actual_money),并计算折扣金额(@discount_money)。
4. 将收银记录插入到`cashaccount`表中。
5. 将销售明细插入到`cashaccount_detail`表中。
6. 更新库存表中的商品数量。
7. 如果用户ID大于等于10000,更新用户的卡余额和积分。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Open CASCADE学习|BRepFill_Edge3DLaw

BRepFill_Edge3DLaw类继承自BRepFill_LocationLaw&#xff0c;用于在3D空间中定义边缘的几何法则。 下面是对代码中关键部分的解释&#xff1a; 文件头部&#xff1a;包含了版权信息&#xff0c;指出这个文件是OCCT软件库的一部分&#xff0c;并且根据GNU Lesser General Publi…

驾驶证OCR识别接口如何对接

驾驶证OCR识别接口也叫驾驶证文字识别OCR接口&#xff0c;指的是传入驾驶证照片&#xff0c;精准识别静态驾驶证图像上的文字信息。那么驾驶证OCR文字识别接口如何对接呢&#xff1f; 首先我们找到一家有驾驶证OCR识别接口的服务商&#xff0c;数脉API,然后注册账户&#xff0…

WPF容器控件之dockpanel、布局控件

dockpanel 容器控件&#xff0c;对其子元素进行或者水平垂直排布&#xff0c;也可以叫停靠面板,也可以让子元素停靠到容器某一个边上&#xff0c;拉伸元素拾起充满全部的高度或者宽度&#xff0c;也可以使最后一个子元素是否铺满剩余的空间。 参数 LastChildFill最后一个子元素…

人工智能应用正在改变我们的生活

在这个AI蓬勃发展的时代&#xff0c;你如何使用人工智能&#xff1f;如果您认为还没有&#xff0c;请再想一想。人工智能已经为我们的许多日常活动提供了动力&#xff0c;尽管您可能还没有有意将其用作工具&#xff0c;但这种情况可能会在不久的将来发生变化。随着顶尖科技公司…

政务服务电子文件归档和电子档案管理系统,帮助组织收、管、存、用一体化

作为数字政府建设的重要抓手&#xff0c;政务服务改革经过多年发展&#xff0c;截至 2022 年底&#xff0c;全国一体化在线政务服务平台实名用户超过10亿人&#xff0c;在政务服务、办件过程中出现了大量需要归档的电子文件&#xff0c;对于电子档案、电子证照的需求愈加强烈。…

如何高效解决渠道问题

品牌渠道会围绕销售做一系列活动&#xff0c;定价也会影响渠道的发展&#xff0c;同样的维护好价格&#xff0c;对渠道来说同样重要&#xff0c;渠道中常见的问题包含低价、窜货等&#xff0c;当低价问题不及时解决&#xff0c;会波及影响更多链接&#xff0c;使其他店铺为了流…

数据可视化训练第二天(对比Python与numpy中的ndarray的效率并且可视化表示)

绪论 千里之行始于足下&#xff1b;继续坚持 1.对比Python和numpy的性能 使用魔法指令%timeit进行对比 需求&#xff1a; 实现两个数组的加法数组 A 是 0 到 N-1 数字的平方数组 B 是 0 到 N-1 数字的立方 import numpy as np def numpy_sum(text_num):"""…

环保用电解决方案--企业污染治理设施用电监管系统/分表计电

★环保解决方案 通过对污染防治设施用电实时监控&#xff0c;实现对企业生产运行无死角、全流程、差别化、精细化管理&#xff0c;达到变人防为信息化技防&#xff0c;从事后处罚到介入式执法&#xff0c;彻底扭转传统依靠人力、经验及部分排污在线数据进行现场核查的状态&…

python使用opencv对图像的基本操作(4)

19.调整图片强度 19.1.调整强度 import numpy as np from skimage import exposure img np.array([51, 102, 153], dtypenp.uint8) matexposure.rescale_intensity(img) print(mat)注&#xff1a;skimage.exposure.rescale_intensity函数来调整img数组的亮度范围。这个函数会…

Unreal Engine(虚幻引擎)的版本特点

Unreal Engine&#xff08;虚幻引擎&#xff09;是Epic Games开发的游戏引擎&#xff0c;广泛应用于游戏开发、影视制作、建筑设计、虚拟现实等领域。Unreal Engine版本指的是该引擎的发布版本&#xff0c;不同版本之间在功能、性能和稳定性等方面存在差异。北京木奇移动技术有…

产品推荐 | 基于Xilinx Kintex-7 FPGA K7 XC7K325T PCIeX8 四路光纤卡

01 产品概述 板卡主芯片采用Xilinx公司的XC7K325T-2FFG900 FPGA&#xff0c;pin_to_pin兼容FPGAXC7K410T-2FFG900&#xff0c;支持8-Lane PCIe、64bit DDR3、四路SFP连接器、四路SATA接口、内嵌16个高速串行收发器RocketIO GTX&#xff0c;软件具有windows驱动。 02 技术指标…

2. 感知机算法和简单 Python 实现

目录 1. 感知机介绍 1.1 背景 1.2 定义 1.2.1 权重 1.2.2 阈值 1.2.3 偏置 1.3 逻辑处理&#xff1a;与门、非门、或门 2. 感知机实现 2.1 与门的 Python 实现 2.2 非门的 Python 实现 2.3 或门的 Python 实现 1. 感知机介绍 1.1 背景 感知机1957年由Rosenblatt提出…

从 Servlet 到 DispatcherServlet(SpringMvc 容器的创建)

DispatcherServlet 的继承体系 SpringMvc 是一个具有 Spring 容器&#xff08;ApplicationContext&#xff09;的 Servlet。其中&#xff0c;HttpServlet 属于 JDK 的内容&#xff0c;从 HttpServletBean 开始&#xff0c;便属于 Spring 体系中的内容。 HttpServletBean&…

ALV 排序、汇总

目录 前言 实战 汇总 分类汇总 排序 分类汇总分隔方式&#xff08;仅适用于LIST ALV&#xff09; 完整代码&#xff1a; 前言 在SAP ABAP ALV中&#xff0c;排序和汇总是两个关键特性&#xff0c;用于组织和分析数据显示。 排序 排序功能允许用户根据一个或多个…

深入理解指针(4)

目录 1. 字符指针变量2. 数组指针变量2.1 数组指针变量是什么&#xff1f;2.2 数组指针变量怎么初始化 3. ⼆维数组传参的本质4. 函数指针变量4.1 函数指针变量的创建4.2 函数指针变量的使⽤4.3 两段有趣的代码4.3.1 typedef 关键字 5. 函数指针数组6. 转移表 1. 字符指针变量 …

gorm-sharding分表插件升级版

代码地址&#xff1a; GitHub - 137/gorm-sharding: Sharding 是一个高性能的 Gorm 分表中间件。它基于 Conn 层做 SQL 拦截、AST 解析、分表路由、自增主键填充&#xff0c;带来的额外开销极小。对开发者友好、透明&#xff0c;使用上与普通 SQL、Gorm 查询无差别.解决了原生s…

探秘主播们的直播美颜SDK:深度学习算法原理

直播美颜技术作为直播行业中的一项重要技术&#xff0c;广受大家关注。本文将深入探讨主播们常用的直播美颜SDK背后的深度学习算法原理&#xff0c;揭秘其神奇之处。 一、什么是直播美颜SDK&#xff1f; 直播美颜SDK是一种应用程序接口&#xff0c;通过嵌入到直播软件中&…

根据数据写动态生成折线图

根据数据格式 dataGoz: [{"xAxis": ["2017-3-1", "2017-3-15", "2017-4-1", "2017-4-12", "2017-5-21", "2017-6-5", "2017-8-12", "2017-9-1", "2017-10-11"],"y…

C++函数模板可变参数如何一次性解包?

零、问题 如下代码中&#xff0c;调用func1的时候&#xff0c;只能递归一次取到一个值&#xff0c;有没有什么方法像func2中那样&#xff0c;一次把所有的值都拿出来呢&#xff1f; ​ 回答 二元操作 (binary operator) 」 &#xff1a;需要两个操作数的操作&#xff0c;比如…

【全开源】JAVA国际版多语言语聊大厅语音聊天APP系统源码

JAVA国际版多语言语聊大厅小程序 随着全球化的加速和互联网技术的飞速发展&#xff0c;人们越来越需要一种能够跨越语言和文化障碍的交流方式。JAVA国际版多语言语聊大厅小程序应运而生&#xff0c;它以其独特的功能和全球化的设计理念&#xff0c;为全球用户提供了一个无障碍…
最新文章