mysql中存储过过程和游标的联合使用

1.SQL如下:


DELIMITER //
DROP PROCEDURE IF EXISTS PrintAllEmployeeNames5;
CREATE PROCEDURE PrintAllEmployeeNames5()
BEGIN
	DECLARE error_count INT DEFAULT 0;
	DECLARE num INT ;
	DECLARE done INT DEFAULT 0;
	DECLARE id1 BIGINT DEFAULT 0;
	DECLARE address VARCHAR(255) DEFAULT null;
	DECLARE username1 VARCHAR(255) DEFAULT null;
	DECLARE phone1 VARCHAR(255) DEFAULT '';
	DECLARE visittime1 DATETIME DEFAULT NULL;
	

	
	-- 定义游标hualian_user
	DECLARE cur CURSOR FOR SELECT
	id,phone,last_login_time,ip_address  FROM tb_user; 
	
	-- 声明NOT FOUND处理程序,当游标中没有更多行时,将done设置为1
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
    
    -- 下边语句会自动跳过失败语句
    -- DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET error_count =1;
    
	
	--事务未生效
	-- START TRANSACTION;
	OPEN  cur;
	
	read_loop: LOOP
		FETCH cur INTO id1,phone1,visittime1,address;
		 SELECT address;
		-- 检查是否还有更多的行
	        IF done THEN
	            LEAVE read_loop;
	        END IF;
	        
		
		
			-- 业务逻辑
				UPDATE tb_user SET statuss=2 WHERE id=id1;
			-- mysql中,除数为0,不会抛出异常,会返回特定的结果或警告 visittime1
				SET num=1/0;
				INSERT INTO tb_user_copy(id,phone,last_login_time,ip_address) 
				VALUES(id1,phone1,address,address);	
			
			
		END LOOP;
	CLOSE  cur;
	-- COMMIT;
	END //
DELIMITER ;



-- 执行存储过程

CALL PrintAllEmployeeNames5();
	

2.遇到的bug

1.SQL ERROR 1064 : You have an error in your SQL syntax; check the manual that corresponds to

原因:把自定义变量定义在定义游标之后

改正方式:把自定义变量放到定义游标之前

2.Mysql中关于 错误 1366 - Incorrect string value: ‘\xE5\xBC\xA0\xE4\xB8\x89‘ for column ‘name‘ at row 1

判断步骤:

1.使用出现问题的字段的字符集编码

方法一:使用HeidiSQL操作

方法二:SQL查询:SHOW FULL COLUMNS from tb_user;

查询的报错字段字符集如上图所示

2.修改数据库的字符集编码HeidiSQL()

修改字符集编码与报错字段的字符集编码相同

终于成功!!!!

  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

莳光.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值