MySql:存储过程编译错误代码1337

来源:互联网 发布:怕错过了也不会知 编辑:程序博客网 时间:2024/06/06 05:33

ERROR 1337 (42000): Variable or condition declaration after cursor

由于在项目需要,写了个存储过程,涉及到了游标的使用,但是以前都是使用一个游标,这次是两个游标嵌套,并且有关联,就是第二个游标的结果集需要第一个游标的循环值,辛辛苦苦写完,MySql却给我报错:ERROR 1337 (42000): Variable or condition declaration after cursor。

百度了一下都是在说,要先声明变量,再开始游标。游标(cursor)必须在声明处理程序之前被声明,并且变量和条件必须在声明游标或处理程序之前被声明。改了好几遍还是不可以,最后实在没办法,将内部的游标循环单独写一个储存过程,再用外层的游标去调用这个储存过程--call procedure
外层的游标
BEGIN /* 定义变量一 */  DECLARE bbsCount int;    /*文档总数*/DECLARE bbsKeyWordCount int;  /*文档总词汇数*/DECLARE keyWord VARCHAR(25);    /*关键字*/DECLARE depart VARCHAR(25);      /*部门*/DECLARE keyWordCount int;    /*关键字出现的文档数*/DECLARE keyWordWeight DOUBLE;   /*关键字的出现次数*/DECLARE keyWordTFIDF DOUBLE;  /*文档的TFIDF*/DECLARE bbsDataID int;  /*文档的TFIDF*/ -- 遍历数据结束标志    DECLARE bbsDone INT DEFAULT FALSE;DECLARE keyWordDone INT DEFAULT FALSE;/* 定义游标 */      DECLARE bbs_Cur CURSOR FOR              SELECT id FROM bbs_data;-- 将结束标志绑定到游标DECLARE CONTINUE HANDLER FOR NOT FOUND SET bbsDone = TRUE;select max(id) into bbsCount from bbs_data;/*打开游标*/  OPEN bbs_Cur;   /* 循环执行 */   bbs_loop:LOOP  FETCH bbs_Cur INTO bbsDataID;  if bbsDone = 1 then   leave bbs_loop;  end if;  select sum(weight) into bbsKeyWordCount from key_word where bbs_data_id=bbsDataID;CALL p_tf_idf(bbsDataID,bbsCount,bbsKeyWordCount); /* 循环结束 */  end loop bbs_loop;  #当_done=1时退出被循  /*关闭游标*/  CLOSE bbs_Cur;  END
内层的游标
BEGINDECLARE keyWord VARCHAR(25);  /*关键字*/DECLARE depart VARCHAR(25);  /*部门*/DECLARE keyWordCount int;    /*关键字出现的文档数*/DECLARE keyWordWeight DOUBLE;   /*关键字的出现次数*/DECLARE keyWordTFIDF DOUBLE;  /*文档的TFIDF*/DECLARE keyWordDone INT DEFAULT FALSE;DECLARE key_Cur CURSOR FOR select key_word,weight,department from key_word where bbs_data_id=bbsDataID;DECLARE CONTINUE HANDLER FOR NOT FOUND SET keyWordDone = TRUE;OPEN key_Cur;keyWord_loop:LOOP  FETCH key_Cur INTO keyWord,keyWordWeight,depart;  if keyWordDone = 1 then   leave keyWord_loop;  end if;select COUNT(1) into keyWordCount from key_word where key_word=keyWord;set keyWordTFIDF=keyWordWeight/bbsKeyWordCount*log(bbsCount/(keyWordCount+1));INSERT into tf_idf( key_word, tf_idf,department, deleted, create_time, create_by, update_time, update_by)VALUES(keyWord,keyWordTFIDF,depart,0,SYSDATE(),1,SYSDATE(),1);END LOOP keyWord_loop;CLOSE key_Cur;END

0 0
原创粉丝点击