我想知道,我们可以在ELSE IF块中声明游标吗? 当我这样做时,我发现错误 在'declare' .my code
之前缺少子句或其他元素 if State is NOT NULL
then
declare t cursor for select *from student;//this line has error
declare continue handler for NOT FOUND set str=1;
else
declare t cursor for select *from student;
end if;
为什么?
答案 0 :(得分:4)
答案是否。 manual清楚地说:
游标声明必须出现在处理程序声明之前和之后 变量和条件声明。
报告了一个类似的[bug: 15809](,最终不是),但它已通过以下答案结束:
感谢您提出问题报告。对不起,我不认为这是一个错误。 问题是应该声明游标和所有声明 是在SP或块的开始。
请阅读(http://dev.mysql.com/doc/refman/5.0/en/cursors.html):
"在声明处理程序,变量和之前必须声明游标 必须在声明游标或之前声明条件 处理程序"
而且,更清楚 (http://dev.mysql.com/doc/refman/5.0/en/declare.html):
" DECLARE语句用于定义a的本地各种项目 例程:局部变量(参见第17.2.9节“存储的变量” 程序“),条件和处理程序(见第17.2.10节, “条件和处理程序”)和游标(参见第17.2.11节, “光标”)。 SIGNAL和RESIGNAL语句目前不是 支撑。
DECLARE只能在BEGIN ... END复合语句中使用 必须在任何其他陈述之前开始。"
因此,它不是一个错误,而是一个记录在案的行为。
答案 1 :(得分:1)
仅允许在 BEGIN ... END 化合物中使用DECLARE 声明,必须在任何其他声明之前开始。
声明必须遵循一定的顺序。游标声明必须出现在处理程序声明之前。变量和条件声明必须出现在游标或处理程序声明之前。
答案 2 :(得分:0)
游标声明必须出现在处理程序声明之前以及变量和条件声明之后。
如果要在某些条件下使用该游标,则必须在IF条件下使用FETCH CURSOR语法。