MySQL 游标获取空值
MySQL Cursors fetching null value
从游标中提取的数据为 NULL。但是我的查询 select id from Projects
返回的行数是正确的。我在我的程序循环中放了一个 select 语句来调试。它为 id 返回 null。
我已经关注了这个 [https://dev.mysql.com/doc/refman/5.5/en/cursors.html]
这段代码有什么问题?
DELIMITER $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `ReportDiffProDiffFinYear`()
BEGIN
DECLARE id INT;
DECLARE sqlstr varchar(10000) default "select financialYear as 'name' ";
DECLARE done INT DEFAULT FALSE;
DECLARE cur1 CURSOR FOR select id from Projects; /* My CURSOR QUERY*/
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
OPEN cur1;
read_loop: LOOP
FETCH cur1 INTO id;
select id;
IF done THEN
LEAVE read_loop;
END IF;
set sqlstr = concat(sqlstr, ", sum(if(projects_id=",id,",0,1)) ");
END LOOP;
CLOSE cur1;
set @sqlstr = concat(sqlstr," from (select * from WaterPoints where status='Waterpoint Complete') as wp, (select id,financialYear from ProjectDetails) as pd where pd.id=wp.projectDetails_id group by pd.financialYear");
prepare stmt from @sqlstr;
execute stmt;
deallocate prepare stmt;
END
我认为您的变量名 id
与游标查询冲突,因此游标查询获取 id
变量的值(null),而不是 id 的值projects
table。更改变量名称或使用 projects.id
引用查询中的列。
从游标中提取的数据为 NULL。但是我的查询 select id from Projects
返回的行数是正确的。我在我的程序循环中放了一个 select 语句来调试。它为 id 返回 null。
我已经关注了这个 [https://dev.mysql.com/doc/refman/5.5/en/cursors.html]
这段代码有什么问题?
DELIMITER $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `ReportDiffProDiffFinYear`()
BEGIN
DECLARE id INT;
DECLARE sqlstr varchar(10000) default "select financialYear as 'name' ";
DECLARE done INT DEFAULT FALSE;
DECLARE cur1 CURSOR FOR select id from Projects; /* My CURSOR QUERY*/
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
OPEN cur1;
read_loop: LOOP
FETCH cur1 INTO id;
select id;
IF done THEN
LEAVE read_loop;
END IF;
set sqlstr = concat(sqlstr, ", sum(if(projects_id=",id,",0,1)) ");
END LOOP;
CLOSE cur1;
set @sqlstr = concat(sqlstr," from (select * from WaterPoints where status='Waterpoint Complete') as wp, (select id,financialYear from ProjectDetails) as pd where pd.id=wp.projectDetails_id group by pd.financialYear");
prepare stmt from @sqlstr;
execute stmt;
deallocate prepare stmt;
END
我认为您的变量名 id
与游标查询冲突,因此游标查询获取 id
变量的值(null),而不是 id 的值projects
table。更改变量名称或使用 projects.id
引用查询中的列。