0
点赞
收藏
分享

微信扫一扫

MySQL 游标模板 + 动态SQL

DYBOY 2022-01-17 阅读 34
sqlmysql

存储过程中使用游标

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;

不当之处,还望赐教

举报

相关推荐

0 条评论