今天在开发procedure时遇到些磕绊,感觉与其说是语法,不如说是潜规则.
案例1:在开发一个使用cursor的过程时,遇到1337 - Variable or condition declaration after cursor or handler declaration,但是我实际上已经定义了的顺序是如下.
……
DECLARE topic INT(11);
DECLARE cur1 CURSOR FOR SELECT DISTINCT topicID from tab;
DECLARE done INT DEFAULT FALSE;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
……
之后百度有看到一篇博客说,要把定义的变量放到最前。我受到启发,开始调整这些语句的位置
以下是我调整之后,可以通过的procedure
……
DECLARE topic INT(11);
DECLARE done INT DEFAULT FALSE;
DECLARE cur1 CURSOR FOR SELECT DISTINCT topicID from tab;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
……
我其实也不太清楚原理是什么,在这里作为一个开发的参考吧顺序应为:
变量
done
cursor
CONTINUE HANDLER FOR NOT FOUND
案例2:procedure中的传入传出参数是否需要标明长度的问题
int型可以不标长度,但是varchar类型必须标明长度,否则会编译失败,而且很难找到!