存储过程中使用游标
CREATE PROCEDURE PROCEDURE_NAME()
BEGIN
-- 定义变量,用于接受游标中的值
DECLARE A VARCHAR(10);
DECLARE B VARCHAR(20);
DECLARE C INT DEFAULT 0;
DECLARE D INT DEFAULT 0;
-- 定义退出游标标签
DECLARE DONE BOOLEAN DEFAULT 0;
-- 定义游标
DECLARE CURSOR_NAME CURSOR FOR
SELECT AA, BB, CC, DD FROM TABLE_NAME;
-- 游标遍历结束时会出现SQLSTATE '02000', 当出现SQLSTATE '02000'时,将DONE置为1。
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET DONE = 1;
-- 打开游标
OPEN CURSOR_NAME ;
-- 遍历游标
REPEAT
FETCH CURSOR_NAME INTO A, B,C,D;
IF DONE != 1 THEN
IF 判断条件为真 THEN
-- 动态SQL
SET @SQL = CONCAT('UPDATE table_name ', 'SET ', A, ' = ', A, ' * ', B, ' + ',C,' WHERE MONTH_ID = ', B,' AND ',A,' <> 0',' AND ',A,' IS NOT NULL');
PREPARE SQL1 FROM @SQL;
EXECUTE SQL1;
END IF;
END IF;
UNTIL DONE END REPEAT;
-- 关闭游标
CLOSE CURSOR_NAME;
END;
不当之处,还望赐教