最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MySQL存儲(chǔ)過程for循環(huán)處理查詢結(jié)果方式

 更新時(shí)間:2026年06月09日 09:46:37   作者:Mr.D.Chuang  
這段文章詳細(xì)介紹了在MySQL數(shù)據(jù)庫中使用存儲(chǔ)過程查詢結(jié)果并進(jìn)行循環(huán)處理的方法,涵蓋了創(chuàng)建存儲(chǔ)過程、聲明游標(biāo)、循環(huán)迭代以及關(guān)閉游標(biāo)等關(guān)鍵步驟,適合數(shù)據(jù)庫開發(fā)人員參考

MySQL數(shù)據(jù)庫中,存儲(chǔ)過程是一種預(yù)編譯的SQL語句集,可以被多次調(diào)用。

MySQL中使用存儲(chǔ)過程查詢到結(jié)果后,有時(shí)候需要對這些結(jié)果進(jìn)行循環(huán)處理。

1. 創(chuàng)建表

CREATE TABLE `t_job` (
  `job_id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `job_name` varchar(50) DEFAULT NULL,
  `next_time` timestamp NULL DEFAULT NULL COMMENT '下次執(zhí)行時(shí)間',
  `last_task` int(11) DEFAULT NULL,
  PRIMARY KEY (`job_id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4;
CREATE TABLE `t_task` (
  `task_id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `start_time` datetime DEFAULT NULL,
  `end_time` datetime DEFAULT NULL,
  `status` tinyint(1) DEFAULT NULL,
  `job_id` int(11) NOT NULL,
  PRIMARY KEY (`task_id`)
) ENGINE=InnoDB AUTO_INCREMENT=25 DEFAULT CHARSET=utf8mb4;

2. 存儲(chǔ)過程查詢結(jié)果

2.1 創(chuàng)建存儲(chǔ)過程

創(chuàng)建一個(gè)簡單的存儲(chǔ)過程來查詢數(shù)據(jù)

CREATE DEFINER=`root`@`%` PROCEDURE `p_sayn_job`()
BEGIN
	#Routine body goes here...
	DECLARE v_cnt INT;
	DECLARE v_job_id INT; 
	SELECT count( 1 ) INTO v_cnt 
	  FROM 	t_job j 
	 WHERE 	j.next_time < SYSDATE();
	IF 	v_cnt > 0 THEN	
	 -- 插入數(shù)據(jù)
		INSERT INTO t_task ( start_time, end_time, STATUS, job_id )
			VALUES
	  (SYSDATE(), SYSDATE()+ 1, 1, v_job_id );			
		-- 更新數(shù)據(jù)
		UPDATE t_job j 
			 SET j.last_task = ( SELECT MAX( t.task_id ) FROM t_task t WHERE t.job_id = j.job_id ),
					 j.next_time = DATE_ADD( j.next_time, INTERVAL 1 DAY ) 
		 WHERE j.job_id = v_job_id;
	END IF;
END

2.2 添加for循序語句

DECLARE語句聲明游標(biāo)jobs

-- DECLARE語句聲明游標(biāo)
DECLARE jobs CURSOR FOR
(SELECT j.job_id FROM t_job j WHERE j.next_time > SYSDATE());	

DECLARE語句聲明結(jié)束標(biāo)識(shí)v_finished

-- 聲明變量
DECLARE v_finished  int DEFAULT FALSE;
-- 結(jié)束標(biāo)識(shí)
DECLARE CONTINUE HANDLER FOR NOT FOUND SET v_finished = TRUE;

OPEN語句打開游標(biāo)

-- 	OPEN語句打開游標(biāo)
OPEN  jobs ;

循環(huán)迭代jobs

-- 	循環(huán)迭代 jobs 
read_loop : LOOP

END LOOP read_loop;

使用FETCH語句檢索光標(biāo)指向的下一行,并將光標(biāo)移動(dòng)到結(jié)果集中的下一行。

-- 	使用FETCH語句檢索光標(biāo)指向的下一行,并將光標(biāo)移動(dòng)到結(jié)果集中的下一行。
FETCH jobs into v_job_id;

使用v_finished變量來檢查列表是否有id來終止循環(huán)。

-- 	使用v_finished變量來檢查列表是否有id來終止循環(huán)。
IF v_finished THEN
	LEAVE read_loop; 
END IF;

寫入自己的處理業(yè)務(wù)SQl,然后CLOSE語句以停用游標(biāo)并釋放與其關(guān)聯(lián)的內(nèi)存。

-- CLOSE語句以停用游標(biāo)并釋放與其關(guān)聯(lián)的內(nèi)存
CLOSE jobs;

完整的存儲(chǔ)過程,如下:

CREATE DEFINER=`root`@`%` PROCEDURE `p_sayn_job`()
BEGIN#Routine body goes here...
	DECLARE v_cnt INT;
	DECLARE v_finished  int DEFAULT FALSE;
	DECLARE v_job_id INT; 
	-- DECLARE語句聲明游標(biāo)
	DECLARE jobs CURSOR FOR
		  (SELECT j.job_id FROM t_job j WHERE j.next_time > SYSDATE());	
	-- 結(jié)束標(biāo)識(shí)
	DECLARE CONTINUE HANDLER FOR NOT FOUND SET v_finished = TRUE;

	SELECT count( 1 ) INTO v_cnt 
	  FROM 	t_job j 
	 WHERE 	j.next_time < SYSDATE();
		
	IF 	v_cnt > 0 THEN
		
		-- 	OPEN語句打開游標(biāo)
		OPEN  jobs ;
		-- 	循環(huán)迭代 jobs 
		read_loop : LOOP
				-- 	使用FETCH語句檢索光標(biāo)指向的下一行,并將光標(biāo)移動(dòng)到結(jié)果集中的下一行。
		   FETCH jobs into v_job_id;

			-- 	使用v_finished變量來檢查列表是否有id來終止循環(huán)。
			IF v_finished THEN
				LEAVE read_loop; 
			END IF; 
			-- 處理業(yè)務(wù)SQl 就在這了
				INSERT INTO t_task ( start_time, end_time, STATUS, job_id )
			      VALUES
				 ( SYSDATE(), SYSDATE()+ 1, 1, v_job_id );			
			
			
			  UPDATE t_job j 
					 SET j.last_task = ( SELECT MAX( t.task_id ) FROM t_task t WHERE t.job_id = j.job_id ),
					   	 j.next_time = DATE_ADD( j.next_time, INTERVAL 1 DAY ) 
			 	 WHERE j.job_id = v_job_id;
			
			
		END LOOP read_loop;
		-- CLOSE語句以停用游標(biāo)并釋放與其關(guān)聯(lián)的內(nèi)存
		CLOSE jobs;

		
	END IF;
END

2.3 保存執(zhí)行存儲(chǔ)過程

CALL p_sayn_job();

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論

姜堰市| 临颍县| 辽阳县| 都江堰市| 龙州县| 嘉善县| 县级市| 富裕县| 邢台县| 嘉定区| 霍山县| 台南市| 改则县| 博客| 教育| 襄樊市| 隆子县| 军事| 保康县| 巴林左旗| 镇赉县| 泸州市| 库尔勒市| 大邑县| 陵水| 孝感市| 德钦县| 瓦房店市| 确山县| 马山县| 云浮市| 和平县| 宿松县| 葫芦岛市| 扬中市| 湾仔区| 吉安市| 阿勒泰市| 开江县| 烟台市| 拜城县|