zoukankan      html  css  js  c++  java
  • 出库存储过程和分页存储过程

     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;
  • 相关阅读:
    一行代码轻松修改 Text Field 和 Text View 的光标颜色 — By 昉
    六种手势识别,你用了哪些?——董鑫
    Mac 屏幕录制Gif 制作 By-胡罗
    利用ICMP协议的PING命令获取客户端当前网络质量 by徐文棋
    iOS加载Gif图片的N种方式 By-H罗
    [手游项目3]-10-Go语言atomic原子操作
    [手游项目3]-9-Go语言sync.Map(在并发环境中使用的map)
    LRU原理和Redis实现
    Cleanup failed to process the following paths错误的解决
    [手游项目3]-8-排行榜redis实现
  • 原文地址:https://www.cnblogs.com/Hardshells/p/13426352.html
Copyright © 2011-2022 走看看