出库存储过程和分页存储过程

 1 CREATE PROCEDURE AddCheckOut (
 2     _proId INT,
 3     -- 商品主键
 4     _oprerator VARCHAR (50),
 5     -- 操作人
 6     _checkOutNum INT,
 7     -- 出库数量
 8     OUT result INT --  返回的存储过程是否执行成功的标志位
 9 )
10 BEGIN
11     -- 接收错误信息的标识变量
12     DECLARE    err_flag INT DEFAULT 0;
13 
14     DECLARE snum INT DEFAULT 0;
15 
16     -- 处理可能会发生的错误
17     DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET err_flag = 1;
18 
19     -- 开启事务
20     START TRANSACTION;
21 
22     -- 拿到库存的值
23     SET snum = (SELECT StoreNumber FROM tb_product WHERE PId = _proId);
24 
25     -- 如果库存量小于了出库量
26     IF snum < _checkOutNum THEN
27         SET result = 2;-- 说明库存不足
28         ROLLBACK;-- 回滚
29     ELSE
30         -- 更新库存量
31         UPDATE tb_product SET StoreNumber = StoreNumber - _checkOutNum WHERE PId = _proId;
32         -- 生成出库单
33         INSERT INTO TB_CheckOutBill (ProId,Oprerator,CheckOutNum) VALUES(_proId,_oprerator,_checkOutNum);
34         -- 判断是否发生了错误
35         IF err_flag = 1 THEN
36             SET result = 0;    -- 说明执行失败
37             ROLLBACK;    -- 回滚
38         ELSE
39             SET result = 1;    -- 说明执行成功
40             COMMIT;    -- 提交
41         END IF;
42     END IF;
43 END;
44 -- 出库存储过程的调用测试
45 CALL AddCheckOut (4, '张三', 120 ,@num);
46 
47 SELECT @num;
48 
49 -- 分页存储过程
50 CREATE PROCEDURE ProductPage (
51     _sqlWhere VARCHAR (4000),
52     _pageIndex INT,
53     _pageSize INT,
54     OUT rowCount INT
55 )
56 BEGIN
57     DECLARE startRow INT DEFAULT 0;    -- 定义一个接收计算要跳过的数据量的变量
58     SET startRow = (_pageIndex - 1) * _pageSize;
59 
60     -- 分页的sql语句
61     SET @sqlStr = CONCAT("SELECT SQL_CALC_FOUND_ROWS * from tb_product p join tb_store s on p.StoreId=s.SId ",_sqlWhere," LIMIT ",startRow,",",_pageSize);
62 
63     PREPARE sqlQUery FROM @sqlStr;
64 
65     EXECUTE sqlQUery;
66 
67     DEALLOCATE PREPARE sqlQUery;-- 销毁预处理变量  清理内存
68     -- 取得总数据量
69     SET rowCount = FOUND_ROWS();
70 END;
71 
72 -- 分页存储过程的调用测试
73 CALL ProductPage ('', 1, 2 ,@num);
74 
75 SELECT @num;

 

posted @ 2020-08-03 15:05  陈喻谐  阅读(128)  评论(0编辑  收藏  举报
Live2D