sql 出库存储过程

CREATE PROCEDURE AddCheckOut (
_proId INT,
-- 商品主键
_oprerator VARCHAR (50),
-- 操作人
_checkOutNum INT,
-- 出库数量
OUT result INT -- 返回的存储过程是否执行成功的标志位
)
BEGIN
-- 接收错误信息的标识变量
DECLARE err_flag INT DEFAULT 0;

DECLARE snum INT DEFAULT 0;

-- 处理可能会发生的错误
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET err_flag = 1;

-- 开启事务
START TRANSACTION;

-- 拿到库存的值
SET snum = (SELECT StoreNumber FROM tb_product WHERE PId = _proId);

-- 如果库存量小于了出库量
IF snum < _checkOutNum THEN
SET result = 2;-- 说明库存不足
ROLLBACK;-- 回滚
ELSE
-- 更新库存量
UPDATE tb_product SET StoreNumber = StoreNumber - _checkOutNum WHERE PId = _proId;
-- 生成出库单
INSERT INTO TB_CheckOutBill (ProId,Oprerator,CheckOutNum) VALUES(_proId,_oprerator,_checkOutNum);
-- 判断是否发生了错误
IF err_flag = 1 THEN
SET result = 0; -- 说明执行失败
ROLLBACK; -- 回滚
ELSE
SET result = 1; -- 说明执行成功
COMMIT; -- 提交
END IF;
END IF;
END;
-- 出库存储过程的调用测试
CALL AddCheckOut (4, '张三', 120 ,@num);

SELECT @num;

原文地址:https://www.cnblogs.com/swjlove/p/13565833.html