我正在使用MySQL 5.2.42 CE。
我有一个表,其中有一个名为"organization_id"的列。它包含不同行的一些重复值,这意味着该字段中可以有多行的"org1"值。现在我必须遍历该列的不同值,这意味着不同的组织。
但是我不知道有没有For-Each loop in mysql。
我就是这样做的:
Select Distinct organization_id From tbl_organization这给我返回了所有不同的组织。现在,我如何遍历列表并访问每个organization_id?我在DB的触发器中写下了这段代码。请帮帮忙。
谢谢和问候,Surodip Patra
发布于 2014-01-21 14:32:48
您必须使用CURSORS。使用游标将获取的id读取到局部变量中,并基于该组织id执行其他条件操作。
...
DECLARE cur_orgs CURSOR FOR
SELECT DISTINCT organization_id FROM tbl_organization;
...
OPEN cur_orgs;
...
Reading_Orgs: LOOP
FETCH cur_orgs INTO _org_id;
...
IF done THEN
LEAVE Reading_Orgs;
END IF;
IF ... THEN
...
ELSE
...
END IF;
END LOOP;
CLOSE cur_orgs;
...
...发布于 2014-01-21 14:31:43
如果我没弄错的话
您可以在触发器中使用CURSOR。
ursor用于迭代查询返回的一组行,并处理单个行。目前,对于高于5.x的所有版本,MySQL游标具有以下属性:
update cursor.
MySQL支持以下使用游标的语句。
首先,您必须使用declare语句声明游标:
DECLARE cursor_name CURSOR FOR SELECT_statement;其次,您必须使用OPEN语句打开游标。在从游标中提取行之前,必须先打开游标。
OPEN cursor_name;接下来,您可以使用FETCH语句从游标中检索下一行,并将游标移动到结果集中的下一行。
FETCH cursor_name INTO variable list;最后,您必须关闭光标以停用它,并释放与该光标关联的内存。要关闭游标,可以使用close语句:
CLOSE cursor_name;并使用循环在mysql变量中获取列的值。
你可以查看更多的细节和一个很好的教程,关于如何使用光标。http://www.mysqltutorial.org/mysql-cursor/
发布于 2014-01-23 03:22:20
在大家给出的答案的帮助下,我完成了我的任务。我的SQL如下所示:
CREATE DEFINER=`root`@`%` PROCEDURE `test_report`()
BEGIN
DECLARE _id varchar(20);
DECLARE done int;
DECLARE cur_report cursor for
Select distinct id From my_report_table;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
SET @start_date = DATE_FORMAT(CURDATE(), '%Y-%m-01'); # first date of month
SET @end_date = LAST_DAY(CURDATE()); #last date of month
open cur_report;
reading_reports: LOOP
Fetch cur_report INTO _id;
IF done = 1 THEN
LEAVE reading_orgs;
END IF;
Insert into my_table(id,creation_date,start_date,end_date) Values(_id,CURDATE(),@start_date,@end_date);
END LOOP;
endhttps://stackoverflow.com/questions/21250731
复制相似问题