何时/何处mysql NOT FOUND处理程序被触发

时间:2015-02-27 10:30:11

标签: mysql cursor

今天我一直在讨论为什么我的程序中的一段代码不起作用。程序基本上如下:

DELIMITER $$

CREATE PROCEDURE `updateSomeStuff`()
begin


DECLARE updateSomeStuff_done INT DEFAULT 0;
DECLARE updateSomeStuff_cursor CURSOR FOR SELECT 
    sport
  FROM staging.ssa_SomeStuff_sports
  where SomeStuff_id = p_id;

<1. a bunch of statements and procedure calls>

OPEN updateSomeStuff_cursor;
  read_loop1: LOOP
    FETCH updateSomeStuff_cursor INTO
l_sport;
    IF updateSomeStuff_done = 1 THEN
      LEAVE read_loop1;
    END IF;

    <Do some handling for each record>

  END LOOP;

  CLOSE updateSomeStuff_cursor;

end

我遇到的问题是应该在游标循环中执行的代码没有被执行。经过一番调查后,我发现变量updateSomeStuff_done在进入循环之前已经设置为1,因此循环立即被放弃了。

我能够通过在循环之前将updateSomeStuff_done设置回0来解决问题,但现在我想知道哪些操作可能导致变量设置为1.触发操作的实际代码段是调用到另一个程序,显然我声明的NOT FOUND处理程序不仅仅是一个局部变量,这让我很困惑......

任何可以解释我的人都会发生这种情况?

0 个答案:

没有答案