关于mysql的procedure的一些细节

本文介绍了MySQL中Procedure开发过程中的两个常见问题及解决方案:一是变量声明顺序不当导致的错误;二是传入传出参数中关于类型长度的规定。通过调整变量声明顺序和明确指定参数长度,可以避免编译错误。

今天在开发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类型必须标明长度,否则会编译失败,而且很难找到!


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值