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

2024-06-24 10:36

本文主要是介绍mysql中存储过过程和游标的联合使用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1.SQL如下:


DELIMITER //
DROP PROCEDURE IF EXISTS PrintAllEmployeeNames5;
CREATE PROCEDURE PrintAllEmployeeNames5()
BEGINDECLARE 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_userDECLARE cur CURSOR FOR SELECTid,phone,last_login_time,ip_address  FROM tb_user; -- 声明NOT FOUND处理程序,当游标中没有更多行时,将done设置为1DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;-- 下边语句会自动跳过失败语句-- DECLARE CONTINUE HANDLER FOR SQLEXCEPTION SET error_count =1;--事务未生效-- START TRANSACTION;OPEN  cur;read_loop: LOOPFETCH cur INTO id1,phone1,visittime1,address;SELECT address;-- 检查是否还有更多的行IF done THENLEAVE read_loop;END IF;-- 业务逻辑UPDATE tb_user SET statuss=2 WHERE id=id1;-- mysql中,除数为0,不会抛出异常,会返回特定的结果或警告 visittime1SET 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()

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

终于成功!!!!

这篇关于mysql中存储过过程和游标的联合使用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1089902

相关文章

SQL BETWEEN 的常见用法小结

《SQLBETWEEN的常见用法小结》BETWEEN操作符是SQL中非常有用的工具,它允许你快速选取某个范围内的值,本文给大家介绍SQLBETWEEN的常见用法,感兴趣的朋友一起看看吧... 在SQL中,BETWEEN是一个操作符,用于选取介于两个值之间的数据。它包含这两个边界值。BETWEEN操作符常用

MySQL索引的优化之LIKE模糊查询功能实现

《MySQL索引的优化之LIKE模糊查询功能实现》:本文主要介绍MySQL索引的优化之LIKE模糊查询功能实现,本文通过示例代码给大家介绍的非常详细,感兴趣的朋友一起看看吧... 目录一、前缀匹配优化二、后缀匹配优化三、中间匹配优化四、覆盖索引优化五、减少查询范围六、避免通配符开头七、使用外部搜索引擎八、分

Spring Boot 集成 Quartz并使用Cron 表达式实现定时任务

《SpringBoot集成Quartz并使用Cron表达式实现定时任务》本篇文章介绍了如何在SpringBoot中集成Quartz进行定时任务调度,并通过Cron表达式控制任务... 目录前言1. 添加 Quartz 依赖2. 创建 Quartz 任务3. 配置 Quartz 任务调度4. 启动 Sprin

MySql match against工具详细用法

《MySqlmatchagainst工具详细用法》在MySQL中,MATCH……AGAINST是全文索引(Full-Textindex)的查询语法,它允许你对文本进行高效的全文搜素,支持自然语言搜... 目录一、全文索引的基本概念二、创建全文索引三、自然语言搜索四、布尔搜索五、相关性排序六、全文索引的限制七

Linux下如何使用C++获取硬件信息

《Linux下如何使用C++获取硬件信息》这篇文章主要为大家详细介绍了如何使用C++实现获取CPU,主板,磁盘,BIOS信息等硬件信息,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下... 目录方法获取CPU信息:读取"/proc/cpuinfo"文件获取磁盘信息:读取"/proc/diskstats"文

Java使用SLF4J记录不同级别日志的示例详解

《Java使用SLF4J记录不同级别日志的示例详解》SLF4J是一个简单的日志门面,它允许在运行时选择不同的日志实现,这篇文章主要为大家详细介绍了如何使用SLF4J记录不同级别日志,感兴趣的可以了解下... 目录一、SLF4J简介二、添加依赖三、配置Logback四、记录不同级别的日志五、总结一、SLF4J

使用Python实现一个优雅的异步定时器

《使用Python实现一个优雅的异步定时器》在Python中实现定时器功能是一个常见需求,尤其是在需要周期性执行任务的场景下,本文给大家介绍了基于asyncio和threading模块,可扩展的异步定... 目录需求背景代码1. 单例事件循环的实现2. 事件循环的运行与关闭3. 定时器核心逻辑4. 启动与停

如何使用Nginx配置将80端口重定向到443端口

《如何使用Nginx配置将80端口重定向到443端口》这篇文章主要为大家详细介绍了如何将Nginx配置为将HTTP(80端口)请求重定向到HTTPS(443端口),文中的示例代码讲解详细,有需要的小伙... 目录1. 创建或编辑Nginx配置文件2. 配置HTTP重定向到HTTPS3. 配置HTTPS服务器

Java使用ANTLR4对Lua脚本语法校验详解

《Java使用ANTLR4对Lua脚本语法校验详解》ANTLR是一个强大的解析器生成器,用于读取、处理、执行或翻译结构化文本或二进制文件,下面就跟随小编一起看看Java如何使用ANTLR4对Lua脚本... 目录什么是ANTLR?第一个例子ANTLR4 的工作流程Lua脚本语法校验准备一个Lua Gramm

Java Optional的使用技巧与最佳实践

《JavaOptional的使用技巧与最佳实践》在Java中,Optional是用于优雅处理null的容器类,其核心目标是显式提醒开发者处理空值场景,避免NullPointerExce... 目录一、Optional 的核心用途二、使用技巧与最佳实践三、常见误区与反模式四、替代方案与扩展五、总结在 Java