mysql中ELSE IF块中的游标声明?

时间:2015-12-28 10:51:32

标签: mysql sql

我想知道,我们可以在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;

为什么?

3 个答案:

答案 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   声明,必须在任何其他声明之前开始。

声明必须遵循一定的顺序。游标声明必须出现在处理程序声明之前。变量和条件声明必须出现在游标或处理程序声明之前。

DECLARE

答案 2 :(得分:0)

游标声明必须出现在处理程序声明之前以及变量和条件声明之后。

如果要在某些条件下使用该游标,则必须在IF条件下使用FETCH CURSOR语法。