MySQL 的存储过程中根据 SELECT 查询结果集来循环处理任务

项目中经常会遇到一种情况,我们需要从一个SELECT 的查询中返回一个结果集即一个数组,在循环读取数组中的字段值,这个字段值还将用于放入到另一个SQL 语句中一条一条去做处理。我平常在处理这种情况的时候,一般是直接在开发语言(如 JAVA)中写循环语句嵌套来进行。 前几天跟何同学讨论存储过程,提及在数据库中处理查询比外部调用效率更高。今天无事尝试一次,MySQL 存储过程支持多种逻辑语句( IF / WHILE 等),如想轮循一个SELECT 的查询结果就要用到 CURSOR“游标”;

记下代码,免得久了又忘记


DROP PROCEDURE IF EXISTS test_proc;
DELIMITER //
CREATE PROCEDURE test_proc()
BEGIN	
	DECLARE done INT DEFAULT 0;
	DECLARE MACstr VARCHAR(50) DEFAULT NULL;
	
	DECLARE cur CURSOR FOR
		SELECT DISTINCT(MAC) FROM test;
	
	
	DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;	
	OPEN cur;	
	REPEAT		
		FETCH cur INTO MACstr;
		IF NOT done THEN
			-- 干活
			SELECT MACstr;
		END IF;
 	UNTIL done END REPEAT;
	CLOSE cur;
END
//
DELIMITER ;

-- 执行
CALL test_proc()