2016-10-05 10 views
1

カーソルからフェッチされたデータはNULLです。しかし、私のクエリselect id from Projects返す行の数は正しいです。プロシージャループにselectステートメントを入れてデバッグしています。 idの場合はnullを返します。 私はこれに従っています[https://dev.mysql.com/doc/refman/5.5/en/cursors.html] このコードの何が問題なのですか?null値をフェッチするMySQLカーソル

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 

答えて

1

私はあなたの変数名、カーソルのクエリとid衝突は、したがって、カーソル問合せはid変数(ヌル)の値をフェッチすることを信じて、projectsテーブルからのidの値ではなく。変数の名前を変更するか、projects.idを使用してクエリの列を参照してください。

+1

ありがとうございます。それは完璧に働いた。 –

関連する問題