首页 > 代码库 > mysql repeat

mysql repeat

[begin_label:] REPEAT
statement_list
UNTIL search_condition
END REPEAT [end_label]

#例1:
CREATE PROCEDURE payment_stat ()
BEGIN
DECLARE i_staff_id int;
DECLARE d_amount decimal(5,2);
DECLARE cur_payment cursor for select staff_id,amount from payment;
DECLARE EXIT HANDLER FOR NOT FOUND CLOSE cur_payment;

set @x1 = 0;
set @x2 = 0;

OPEN cur_payment;

REPEAT
FETCH cur_payment INTO i_staff_id, d_amount;
if i_staff_id = 2 then
set @x1 = @x1 + d_amount;
else
set @x2 = @x2 + d_amount;
end if;
UNTIL 0 END REPEAT; #永远为false,依靠EXIT HANDLER触发退出

CLOSE cur_payment; #永远执行不到,依靠EXIT HANDLER执行CLOSE cur_payment

END;


#例2
CREATE PROCEDURE myProc (in_customer_id INT) //创建存储过程
BEGIN

DECLARE l_first_name VARCHAR(30);
DECLARE l_id INT;
DECLARE l_city VARCHAR(30);
DECLARE l_department_count INT;
DECLARE no_more_departments INT;

DECLARE dept_csr CURSOR FOR #游标
SELECT id,first_name, city
FROM employee;

DECLARE CONTINUE HANDLER FOR NOT FOUND SET no_more_departments=1;

SET no_more_departments=0;
OPEN dept_csr;
dept_loop:REPEAT #repeat循环结构
FETCH dept_csr INTO l_id,l_first_name,l_city;
IF no_more_departments=0 THEN
SET l_department_count=l_department_count+1;
END IF;
select l_id,l_first_name,l_city;
UNTIL no_more_departments #通过CONTINUE HANDLER设置为TRUE
END REPEAT dept_loop;
CLOSE dept_csr;
SET no_more_departments=0;

END

mysql repeat