【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,更新用户的卡余额和积分。

  • 19
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Y小夜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值