mysql 游标嵌套循环实例
2015-07-02 16:59
609 查看
BEGIN
#Routine body goes here...
####所有的2个小时之前生成的待支付订单更新为已过期
DECLARE tmp_id INT;
DECLARE tmp_order_id VARCHAR(22);
DECLARE flag INT;
DECLARE update_cursor CURSOR FOR SELECT id, order_id FROM yjl_item_order WHERE order_status = 0 AND add_time < DATE_SUB(NOW(),INTERVAL 2 HOUR);
DECLARE CONTINUE HANDLER FOR NOT FOUND SET flag=1;
SET flag=0;
OPEN update_cursor;
loop_xx1: LOOP /*循环*/
FETCH update_cursor INTO tmp_id,tmp_order_id;
IF flag=1 THEN
leave loop_xx1;
END IF;
BEGIN
DECLARE tmp_price_id INT;
DECLARE tmp_num INT;
DECLARE flag1 INT;
DECLARE cursor2 CURSOR FOR SELECT price_id,code_num FROM yjl_order_info WHERE order_id = tmp_order_id;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET flag1=1;
###更新此订单的抵价券和邀请码
UPDATE log_member_voucher a LEFT JOIN yjl_member_voucher b ON a.mixed_id = b.id SET a.status = 3, b.voucher_status = 0 WHERE a.order_id =
tmp_order_id AND a.status = 0;
UPDATE yjl_item_order SET order_status = 2 WHERE id = tmp_id;
SET flag1=0;
OPEN cursor2;
loop_xx2: LOOP
FETCH cursor2 INTO tmp_price_id, tmp_num;
IF flag1=1 THEN
leave loop_xx2;
END IF;
###库存回滚
UPDATE yjl_item_store SET realse_num = realse_num + tmp_num WHERE price_id = tmp_price_id;
END LOOP;
END;
/*update set where*/
END LOOP;
CLOSE update_cursor ;
END
#Routine body goes here...
####所有的2个小时之前生成的待支付订单更新为已过期
DECLARE tmp_id INT;
DECLARE tmp_order_id VARCHAR(22);
DECLARE flag INT;
DECLARE update_cursor CURSOR FOR SELECT id, order_id FROM yjl_item_order WHERE order_status = 0 AND add_time < DATE_SUB(NOW(),INTERVAL 2 HOUR);
DECLARE CONTINUE HANDLER FOR NOT FOUND SET flag=1;
SET flag=0;
OPEN update_cursor;
loop_xx1: LOOP /*循环*/
FETCH update_cursor INTO tmp_id,tmp_order_id;
IF flag=1 THEN
leave loop_xx1;
END IF;
BEGIN
DECLARE tmp_price_id INT;
DECLARE tmp_num INT;
DECLARE flag1 INT;
DECLARE cursor2 CURSOR FOR SELECT price_id,code_num FROM yjl_order_info WHERE order_id = tmp_order_id;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET flag1=1;
###更新此订单的抵价券和邀请码
UPDATE log_member_voucher a LEFT JOIN yjl_member_voucher b ON a.mixed_id = b.id SET a.status = 3, b.voucher_status = 0 WHERE a.order_id =
tmp_order_id AND a.status = 0;
UPDATE yjl_item_order SET order_status = 2 WHERE id = tmp_id;
SET flag1=0;
OPEN cursor2;
loop_xx2: LOOP
FETCH cursor2 INTO tmp_price_id, tmp_num;
IF flag1=1 THEN
leave loop_xx2;
END IF;
###库存回滚
UPDATE yjl_item_store SET realse_num = realse_num + tmp_num WHERE price_id = tmp_price_id;
END LOOP;
END;
/*update set where*/
END LOOP;
CLOSE update_cursor ;
END
相关文章推荐
- mysql二进制日志(bin-log)配置及相关操作
- MySQL相关问题
- RedHat6下源码安装MySQL5.6
- 清理mysql的sleep链接
- mysql修改主键
- mysql触发器
- MySQL基础笔记(四) 索引
- MySQL基础笔记(四) 索引
- MYSQL查询语句优化
- c mysql 连接 过程
- MYSQL隔离级别及测试包括脏读,幻读
- java使用jdbc对mysql数据库进行操作的步骤和代码
- MySQL常用命令
- Mysql MERGE引擎简介
- mac下彻底卸载mysql方法
- mysql-5.6.25-winx64免安装配置
- MySQL配置
- mysql修改密码
- ubuntu安装mysql错误处理
- Mysql循环插入百万条数据