MYSQL嵌套循环存储过程问题

标签 mysql stored-procedures

我正在尝试在具有嵌套循环的 mysql 中执行一个简单的存储过程。这个想法是检查表是否有任何值,如果没有则插入它们。下面是存储过程的代码。我已经测试了代码的所有部分,如果我注释掉嵌套循环,它将遍历 _my_curs_ 的所有值。但是当我将嵌套循环放在那里时,它只会循环遍历 _my_curs_ 的第一个值,然后当它完成时它似乎不会到达下一个值。嵌套循环似乎可以很好地遍历所有值。

DECLARE _my_id_ INT;
DECLARE _your_id_ INT;
DECLARE _found_id_ INT;

DECLARE _my_curs_ CURSOR FOR SELECT my_id FROM my_ref;
DECALRE _your_curs_ CURSOR FOR SELECT _your_id FROM your_ref;

OPEN _my_curs_;
loop_MY_CURSOR_:LOOP

FETCH _my_curs_ INTO _my_id_;

OPEN _your_curs_;
loop_YOUR_CURSOR_:LOOP

  FETCH _your_curs_ INTO _your_id_;

  SET _found_id_ = (SELECT COUNT(id) 
                  FROM access WHERE my_id = _my_id_ AND your_id = _your_id_);

  IF _found_id_ = 0 THEN
      INSERT INTO access(my_id, your_id)
      VALUES(_my_id_, _your_id_);
  END IF;

  END LOOP loop_YOUR_CURSOR;
  CLOSE _your_curs_;

END LOOP loop_MY_CURSOR;
CLOSE _my_curs_;

END $$

DELIMITER;

最佳答案

Roland Bouman 在这里写了一篇很好的文章,解释了嵌套游标的陷阱和解决方法:link text

关于MYSQL嵌套循环存储过程问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2200544/

相关文章:

mysql - 删除 MySQL 中的重复行

sql - 如何从存储过程输出中进行选择

mysql - PhpMyAdmin,程序保存在文件系统上

php - 查询像数组这样的列

mysql - 我应该用什么代替 IN?

php - 为什么我的数组以空值开头?

mysql - LEFT JOIN 与 GROUP BY 与 WHERE 子句以及 OR 在 sql

sql - 如何组合来自两个存储过程调用的结果集?

java - 调用 CallableStatement.execute() 时出现问题;

SQL Server Formatmessage 函数无法使用过程中的变量