mysql存储过程调试记实

在试运行项目中,因某种原因需要增加一个自增长的字段以适应客户方新需求,由于正式环境运维部门不让开发人员直接连数据库进行操作,所有过程均需通过脚本执行。为了完成该字段的新增,徐要首要对新增的自增字段历史记录填充值,故采用存储过程实现。

调试好的存储过程:

DELIMITER $$
DROP PROCEDURE IF EXISTS `T_FILE_AUTO_INCREMENT_ORDER_NO` $$
CREATE PROCEDURE T_FILE_AUTO_INCREMENT_ORDER_NO()


BEGIN
DECLARE  count_row int DEFAULT 1;
 DECLARE  pid_tmp VARCHAR(50);
 DECLARE done INT DEFAULT FALSE;
 DECLARE  cur_record CURSOR FOR  
          select `pid` from `t_file`; 
 
 DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;


 OPEN cur_record;


 read_loop: LOOP


 FETCH cur_record INTO pid_tmp;


IF done THEN
LEAVE read_loop;
END IF;


      update `t_file` set `t_file`.`order_no` = count_row where `t_file`.`pid` = pid_tmp;
      set count_row = count_row + 1;
END LOOP;
CLOSE  cur_record; 
 


END $$


DELIMITER ;


调整过程中碰到的问题:

1、1054错误:

原代码片段

DECLARE  count_row int DEFAULT  ‘1’;

修改后代码:

DECLARE  count_row int DEFAULT  1;

错误原因:缺省值类型和变量类型不一致导致;

2、 1338错误:

原代码片段:

BEGIN
DECLARE  count_row int DEFAULT 1;
 DECLARE  pid_tmp VARCHAR(50);
 DECLARE done INT DEFAULT FALSE;
 DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
 DECLARE  cur_record CURSOR FOR  
          select `pid` from `t_file`; 
修改后代码:
BEGIN
DECLARE  count_row int DEFAULT 1;
 DECLARE  pid_tmp VARCHAR(50);
 DECLARE done INT DEFAULT FALSE;
 DECLARE  cur_record CURSOR FOR  
          select `pid` from `t_file`; 
 
 DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
错误原因: 游标的error handler定义在游标的定义语句之前导致;
3、变量的改值:
mysql和oracle的改值不同,在MySQL中变量的修改需要添加关键字set,如下:
      set count_row = count_row + 1;





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值