今天我一直在讨论为什么我的程序中的一段代码不起作用。程序基本上如下:
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处理程序不仅仅是一个局部变量,这让我很困惑......
任何可以解释我的人都会发生这种情况?