You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

存储过程中声明两个游标报错[1338]:游标声明在处理程序之后

解决MySQL存储过程中"Cursor declaration after handler declaration"错误

这个错误的核心原因是MySQL存储过程对声明顺序有强制要求,必须严格遵循以下顺序编写声明:

  • 先声明所有变量
  • 再声明所有游标
  • 最后声明所有处理程序(HANDLER)

你的代码里在第一个DECLARE CONTINUE HANDLER之后又声明了cursor2,违反了这个顺序规则,所以触发了1338错误。

修正后的代码如下:

BEGIN
 DECLARE is_done INT DEFAULT 0;
 DECLARE is_done2 INT DEFAULT 0;

 DECLARE variables VARCHAR(16383) DEFAULT "";
 DECLARE variables2 VARCHAR(255);

 -- 先声明所有游标
 DECLARE cursor1 CURSOR FOR SELECT (statement);
 DECLARE cursor2 CURSOR FOR SELECT (statement);

 -- 再声明所有处理程序
 DECLARE CONTINUE HANDLER FOR NOT FOUND SET is_done = 1;
 DECLARE CONTINUE HANDLER FOR NOT FOUND SET is_done2 = 1;

 OPEN cursor1;
 loop1: LOOP
   FETCH cursor1 INTO variables;
   IF is_done = 1 THEN
     LEAVE loop1;
   END IF;
   (statement)
 END LOOP loop1;
 CLOSE cursor1;

 OPEN cursor2;
 loop2: LOOP
   FETCH cursor2 INTO variables2;
   IF is_done2 = 1 THEN
     LEAVE loop2;
   END IF;
   (statement)
 END LOOP loop2;
 CLOSE cursor2;

END;

补充说明:你给两个游标分别设置独立的NOT FOUND标记变量,这个写法可以避免游标间的逻辑冲突,只要保证声明顺序正确,就能解决当前报错。

内容的提问来源于stack exchange,提问作者Sabri

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 06:03:24