Tha*_*anu 16 mysql loops stored-procedures cursor
我正在循环MYSQL存储过程中的游标结果集.我面临的问题是循环总是在最后一次记录中运行两次.这是我的代码,
BEGIN
DECLARE not_found_creadit INT DEFAULT 0;
DECLARE cur_credit CURSOR FOR
SELECT customer_id, amount, status, user_type, employee, note FROM credit WHERE status = 'approved' AND customer_id = int_cust_id;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET not_found_creadit = 1;
OPEN cur_credit;
SET not_found_creadit = 0;
credit_loop : LOOP
IF not_found_creadit THEN
CLOSE cur_credit;
LEAVE credit_loop;
END IF;
FETCH cur_credit INTO vc_customer, dec_amount, vc_status, vc_user_type, vc_emp, vc_note;
SELECT vc_customer, dec_amount, vc_status, vc_user_type, vc_emp, vc_note;
......
......
END LOOP;
END;
Run Code Online (Sandbox Code Playgroud)
意味着如果我有3条记录,循环运行4次,如果它是10条记录循环运行11次,等等.任何想法发生在这里?
Boh*_*ian 22
设置的处理程序not_found_creadit = 1在FETCH返回没有行时被触发,但是你在执行之前检查它的值FETCH,所以循环的主体将在FETCH失败时执行一个额外的时间,然后循环循环在下一个开始时退出迭代.
重新安排你的代码,立即检查变量的值之后的FETCH:
credit_loop : LOOP
FETCH cur_credit INTO vc_customer, dec_amount, vc_status, vc_user_type, vc_emp, vc_note;
IF not_found_creadit THEN
CLOSE cur_credit;
LEAVE credit_loop;
END IF;
SELECT vc_customer, dec_amount, vc_status, vc_user_type, vc_emp, vc_note;
......
......
END LOOP;
Run Code Online (Sandbox Code Playgroud)
另外,请考虑将变量的拼写更正为 not_found_credit